مرجع تخصصی زبان Csharp
جستجو

ایجاد یک فرم دیالوگ، ارجاع یک مقدار از فرم دیگر در سی شارپ

در این پست قصد داریم تا یک فرم دیالوگ ایجاد کنیم، و مقداری را از یک فرم به فرم دیگر ارسال دهیم.


در ابتدای کلام اجازه دهید معنی دیالوگ یا Dialog را در برنامه نویسی باهم بررسی کنیم، دیالوگ به فرم هایی گفته می شود که امکان تعامل با کاربر را داشته باشند، یعنی برنامه نویس فرمی را ایجاد کند که کاربر بتواند چیزی را  انتخاب یا بنویسد و این اطلاعات به فرم والد (فرمی که درخواست اطلاعات کاربر کرده است) را بازگشت داده شود.

بهتر است در مثال واقعی اینگونه بیان کنیم که، فرض کنید قصد داریم تا از کاربر یک پسورد را درخواست کنیم، پس نیاز است تا یک فرم دیالوگ ایجاد کنیم و در آن از کاربر رمز عبور را درخواست کنیم ،سپس رمز وارد شده را توسط کاربر را به فرم مورد نظر ارجاع دهیم.

در اینجا ما 3 کلید Button ایجاد کردیم، که یکی به عنوان کلید OK، یکی به عنوان کلید لغو یا Cancel یک کلید برای لغو حالت نمایش پسورد (***) و نیز یک Textbox برای دریافت پسورد از کاربر.

کاربر به محض دریافت این فرم می بایست یک مقدار به عنوان پسورد وارد کرده و کلید تایید را بزند.

حال بریم سراغ کد نویسی:

public partial class Form2 : MetroForm
{
    public string ReturnValue { get; private set; }

    public Form2()
    {
        InitializeComponent();
    }

    private void btn_ok_Click(object sender, EventArgs e)
    {
        ReturnValue = txt_password.Text;
        this.DialogResult = DialogResult.OK;
        this.Close();
    }

    private void btn_cancel_Click(object sender, EventArgs e)
    {
        //ReturnValue = txt_password.Text;
        this.DialogResult = DialogResult.Cancel;
        this.Close();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        txt_password.UseSystemPasswordChar =! txt_password.UseSystemPasswordChar;
    }
}

یکم کد ها را  تحلیل کنیم:

در خط اول: 

public string ReturnValue { get; private set; }

را می بینیم که درواقع همان مقداری است که قرار است از این فرم (فرم پسورد) به فرم درخواست کننده ارسال نماید.

در تابع بعدی که رویداد کلیک بر روی Button است:

 private void btn_ok_Click(object sender, EventArgs e)
 {
     ReturnValue = txt_password.Text;
     this.DialogResult = DialogResult.OK;
     this.Close();
 }

3 خط کد وجود دارد که آنهارا نیز بررسی می کنیم:

در خط اول به محض کلیک روی Button مقدار موجود درون کادر دریافت پسورد، در متغیری که بالاتر تعریف کردیم، قرار گرفته می شود، در خط دوم نیز یک دیالوگ ریسالت (Dialog Result) برای این کلید ایجاد کردیم که به معنی کلیک بر روی OK است، و در خط سوم نیز فرم بسته می شود. 

و در نهایت نیز برای کلید مربوط به ریزالت کنسل نیز فقط بستن فرم کافی است.

 

بریم سراغ فرم والد (فرمی که درخواست می دهد):

void checkPass()
{
    if (MyPass == null)
    {
        var frmPass = new Form2();
        if (frmPass.ShowDialog() == DialogResult.OK)
        {
            MyPass = frmPass.ReturnValue;
            MessageBox.Show(MyPass);
        }
    }
}

در این کد نیز یک متغیر به نام MyPass در فرم1 ایجاد کردم، که در حال حاضر هیچ مقداری ندارد.

در خط بعدی از Form2 یک شی جدید می سازم، و سپس در یک شرط فرم را به صورت ShowDialog اجرا می کنم، و اگر مقدار DialogResult برابر OK شد (یعنی کاربر کلید OK را فشار داد) سپس مقدار برگشی از فرم جدید (frmPass.ReturnValue) را درون متغیر داخلی خود (MyPass) قرار می دهیم و برای اطمینان نیز آن را درون یک MessageBox نمایش می دهیم.

💬 نظرات کاربران
💬ثبت نام کاربران
💬ورود کاربران