فرم شرطی (Modal Form) در سی شارپ

فرم شرطی، به فرمی گفته می‌شود که، بعد از نمایان شدن شما را مجبور به انجام کارهایی برای ادامه دادن به بقیه کارها می‌کند. فرض کنید به جای استفاده از متد ()Show آن را به صورت زیر تغییر دهیم :

secondForm.ShowDialog();

متدی که الان از آن استفاده می‌کنیم، متد ()ShowDialog می‌باشد. این متد، یک فرم شرطی (Modal form) را به وجود می‌آورد. فرم شرطی، به فرمی گفته می‌شود که بعد از نمایان شدن شما را مجبور به انجام کارهایی برای ادامه دادن به بقیه کارها می‌کند. مثلاً در حالت قبل (هنگام استفاده از متد Show) شما به راحتی می‌توانستید بر روی فرم اصلی برنامه کلیک کرده و آن را فعال کنید اما در این حالت (هنگام استفاده از متد ()ShowDialog) برای فعال کردن بر روی فرم اول، شما مجبورید فرم دوم را ببندید. حال برنامه را اجرا و بر روی دکمه کلیک کنید تا فرم دوم ظاهر شود. بعد از ظاهر شدن فرم، آن را به گوشه‌ای بکشید و سعی کنید که بر روی دکمه دوباره کلیک کنید. مشاهده می‌کنید که، دکمه غیر قابل کلیک است و تا فرم دوم را نبندید، این کار امکان پذیر نیست. دو دکمه به فرم دوم اضافه کنید و خاصیت‌های Name و Text آن‌ها را به صورت زیر تغییر دهید :

خاصیت دکمه اول دکمه دوم
Name btnOK btnCancel
Text OK Cancel

شکل نهایی فرم دوم به صورت زیر است :
form_change_case2
بر روی دکمه OK کلیک کرده و کد زیر را بنویسید :

this.DialogResult = DialogResult.OK;

بعد از تایپ علامت مساوی، IntelliSense ظاهر می‌شود. گزینه DialogResult را انتخاب و علامت نقطه را تایپ کنید تا IntelliSense دوباره ظاهر شود :
MDI-Forms-in-c# (6)
از کادر باز شده گزینه OK را انتخاب کنید. حال بر روی دکمه Cancel کلیک کرده و کد زیر را به آن اضافه کنید :

this.DialogResult = DialogResult.Cancel;

کد نویسی فرم دوم به صورت زیر در می‌آید :

public Form2()
{
    InitializeComponent();
}

private void btnOK_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
}

private void btnCancel_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
}

با استفاده از فرم اول می‌توانید بفهمید که کدام دکمه از فرم دوم کلیک شده است. Cancel یا OK؟ بر روی دکمه فرم اول دو بار کلیک کرده و کدهای آن را به صورت زیر تغییر دهید :

if (secondForm.ShowDialog() == DialogResult.OK)
{
    MessageBox.Show("OK Button Clicked!");
}

کد بالا چک می‌کند که آیا دکمه OK کلیک شده است یا نه؟ اگر کلیک شده باشد پیغامی نمایش داده می‌شود. اما برای دکمه Cancel مجبور نیستید کدی بنویسید چون با زدن این دکمه فرم بسته می‌شود و همین کافی است. حال برنامه را اجرا و بر روی دکمه Change Case در فرم اول کلیک کرده تا فرم دوم ظاهر شود. بر روی دکمه OK کلیک کنید تا پیغام برای شما نمایش داده شود. همین کار را با دکمه Cancel انجام داده و نتیجه را مشاهده نمایید.