16-04-21, 05:09 PM
السلام عليكم ورحمة الله وبركاته
حسب ما فهمت انك تريد ان تتحكم في كونترول من خلال كونترول اخر
هناك نقطة محورية يجب معرفتها هنا ، انه انت من يحدد لكل كنترول ما يمكنه فعله ، لذلك لايجب ابدا تعريف البانل داخل الكنترول او الزر داخل الكنترول الاخر على انه public ! انت تخالف مبدأ ال Encapsulation بذلك ، الاصح ان تبقيهم private كما هم ، وان تقوم بتعريف methods و events لفعل ما تريد بالقدر المناسب وفقط ،
في الكونترول الذي يحتوي على الزر تحتاج لتعريف event عند الضغط على الزر ، وان يكون public ليمكننا الرصول اليه ، وان تقوم باطلاقه عند الضغظ على الزر :
في الكنترول اللذي به بانل نحتاج لتعريف void تقوم باخفاء البانل لنا :
فقط !
الان في المكان اللي تضع فيه هاتان الاداتان تحتاج فقط ان تنادي ال method في ال event
المثال في المرفقات :
حسب ما فهمت انك تريد ان تتحكم في كونترول من خلال كونترول اخر
هناك نقطة محورية يجب معرفتها هنا ، انه انت من يحدد لكل كنترول ما يمكنه فعله ، لذلك لايجب ابدا تعريف البانل داخل الكنترول او الزر داخل الكنترول الاخر على انه public ! انت تخالف مبدأ ال Encapsulation بذلك ، الاصح ان تبقيهم private كما هم ، وان تقوم بتعريف methods و events لفعل ما تريد بالقدر المناسب وفقط ،
في الكونترول الذي يحتوي على الزر تحتاج لتعريف event عند الضغط على الزر ، وان يكون public ليمكننا الرصول اليه ، وان تقوم باطلاقه عند الضغظ على الزر :
كود :
public event EventHandler BtnClicked;
private void btnHide_Click(object sender, EventArgs e)
{
BtnClicked?.Invoke(this, EventArgs.Empty);
}في الكنترول اللذي به بانل نحتاج لتعريف void تقوم باخفاء البانل لنا :
كود :
public void HideThePanel()
{
panel1.Hide();
}فقط !
الان في المكان اللي تضع فيه هاتان الاداتان تحتاج فقط ان تنادي ال method في ال event
كود :
private void controlWithButton1_BtnClicked(object sender, EventArgs e)
{
controlWithPanel1.HideThePanel();
}المثال في المرفقات :

