روش های دسترسی به کنترل های یک فرم در فرم دیگر

یک از روش های دسترسی به کنترل های یک فرم در داخل فرم دیگر ایجاد یک خصوصیت از نوع کنترلی است که می خواهیم به ان دسترسی داشته باشیم. بهتر است که یک مثال بزنیم. یک برنامه ویندوزی ایجاد کرده و یک فرم دیگر به آن اضافه کنید. به فرم اول یک کنترل button به فرم دوم یک کنترل textbox اضافه کنید. حال فرض کنید که می خواهید در داخل فرم اول به این کنترل textbox فرم دوم دسترسی داشته باشید و مقادیری به آن ارسال کنید. برای این منظور ابتدا یک خاصیت از نوع رشته (چون textbox مقادیر رشته را قبول می کند) در فرم دوم ایجاد کنید.

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    public string Text
    {
        get { return this.textBox1.Text; }
       set { this.textBox1.Text = value; }
    }
}

سپس بر روی دکمه در فرم اول دو بار کلیک کرده و کدهای زیر را در داخل آن بنویسید :

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    frm.Text = "Hello, world.";
    frm.ShowDialog();
}

برنامه را اجرا کرده و بر روی دکمه کلیک کنید :
form-to-another-form
مشاهده می کنید که مقدار “Hello World” به کنترل textbox ارسال می شود.

یک روش دیگر این است که خاصیت modifier کنترلی که قرار است به آن دسترسی داشته باشیم (textBox) را برابر Public قرار داده و در رویداد کلیک دکمه در فرم اول کد زیر را بنویسید :

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm = new Form2();
    Control[] Control = frm.Controls.Find("textBox1", false);
    if (Control.Length > 0)
    {
        TextBox textBox = (TextBox)Control[0];
        textBox.Text = "www.w3-farsi.com";
    }

    frm.Show();
}

همانطور که در کد بالا مشاهده می کنید، نام کنترلی را که می خواهیم به آن دسترسی داشته باشیم را به متد find ارسال می کنیم. برنامه را اجرا و نتیجه را مشاهده کنید :
form-to-another-form-1

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. نیما پاسخ دادن

    چرا میپیچونی داداش کنترل مورد نظرو تو فرم ۱ modifiers ش رو public کن بعد یه شی از فرم ۱ تو فرم ۲ بساز حالا راحت قابل دسترسی هست تمام!

    • vahidbaghi پاسخ دادن

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

  2. پویا پاسخ دادن

    سلام ی سوال داشتم
    من دو عدد form دارم چجوری در form اول بفهمم labal که در form دوم دارم چیزی داخلش هست یا ن

    • یونس ابراهیمی پاسخ دادن

      سلام، ممنون میشم از این به بعد سوالتونو تو بخش پرسش و پاسخ مطرح بفرمایید. دکمه F7 رو رو فرم دومتون بزنید تا وارد محیط کدنویسی بشین و کد زیر رو بعد از سازنده فرم بنویسید :

      public string LabelText
      {
          get
          {
              return this.label1.Text;
          }
          set
          {
              this.label1.Text = value;
          }
      } 

      بعد مثلا روی فرم اول دوبار کلیک کنید و تو رویداد Load فرم کد زیر رو بنویسید و برنامه رو اجرا و نتیجه رو ببینید :

      private void Form1_Load(object sender, EventArgs e)
      {
          Form2 f2 = new Form2();
          MessageBox.Show(f2.LabelText);
      }
      

      الان اگه سوال رو تو بخش پرسش و پاسخ مطرح می کردین عکس هم واستون میذاشتم.