سلام خدمت همه دوستان
بنده یک فرم Parent ساختم و یک فرم Child...میخوام با کلیک کردن بر روی یک Button در فرم Child یک متغیر در فرم Parent مقدار دهی بشه...یعنی مثلا مقدار یک متغیر از فرم Child به یک متغیر دیگه در فرم Parent کپی بشه...
چطور میتونم این کارو بکنم...
داخل انجمن سرچ کردم ولی اونا یک فرم جدید میساختند در حالی که فرم Parent اول کار ساخته میشه...میخوام یک روشی باشه که بتونم فرم ساخته شده رو پیدا کنم...
ممنون میشم راهنمایی کنید ...
برای فرم Child کار خاصی لازم نیست انجام بشه چون کد رو داخل همون کلاس اجرا می کنید و مشکلی برای دسترسی نیست.
اما برای ساختن متغیر در فرم Parent دو راه حل کلی پیشنهاد می کنم. یا متغیر static تعریف کنید و یا متغیر non-static که بشه
از این دو طریق مقدار رو از طریق فرم Child یا هر کلاس دیگری دریافت کنه. فرض کنیم که کلاس فرم Parent تون Form1 باشه.
روش اول : متغیر static بسازید
در داخل کلاس فرم Parent تون که فرضا Form1 است، یک متغیر public static به نام x تعریف می کنیم :
کد:
[COLOR="#A9A9A9"] public partial class Form1 : Form
{
[/COLOR] public static int x = 0;
[COLOR="#A9A9A9"] public Form1()
{
InitializeComponent();
}
[/COLOR]
حالا در کلاس فرم Child تون یا هر کلاس دیگری، این متغیر توسط نام Form1.x قابل دسترسی است. دقت کنید که از آنجایی که این متغیر static است، Form1 نام متغیر نیست،
نام کلاس است. از x فقط و فقط صرفا یک نمونه وجود دارد که همیشه قابل دسترسی است و ربطی هم با تعداد نمونه های فرم Form1 که ایجاد شده ندارد.
کد:
[COLOR="#A9A9A9"] private void button1_Click(object sender, EventArgs e)
{
[/COLOR] Form1.x = 12;
[COLOR="#A9A9A9"] }[/COLOR]
روش دوم : متغیر non-static بسازید
در داخل کلاس فرم Parent تون که فرضا Form1 است، یک متغیر public به نام x تعریف می کنیم :
کد:
[COLOR="#A9A9A9"] public partial class Form1 : Form
{
[/COLOR] public int x = 0;
[COLOR="#A9A9A9"] public Form1()
{
InitializeComponent();
}
[/COLOR]
حالا در کلاس فرم Child تون یا هر کلاس دیگری، ابتدا شیء ای که از فرم Form1 ایجاد شده و در حال نمایش است را پیدا می کنیم. این شیء با کدی
شبیه به کد زیر پیدا می شود :
کد:
Form1 f1 = (Form1)Application.OpenForms["Form1"];
در بدنه کلاس هایی که فرم نیستند، برای دسترسی به Application یا باید System.Windows.Forms را ابتدا using کنید و یا System.Windows.Forms را به کد اضافه کنید :
کد:
Form1 f1 = (Form1)System.Windows.Forms.Application.OpenForms["Form1"];
حالا که شیء پیدا شد، متغیر x در آن شیء قابل دسترسی است :
کد:
[COLOR="#A9A9A9"] private void button1_Click(object sender, EventArgs e)
{
[/COLOR] Form1 f1 = (Form1)Application.OpenForms["Form1"];
f1.x = 12;
[COLOR="#A9A9A9"] }[/COLOR]
دقت کنید که از آنجایی که این متغیر non-static است، f1 نام یک شیء معتبر و ایجاد شده از فرم Form1 است و تعداد x ها به تعداد نمونه های فرم Form1 بستگی دارد.
اگر به هر دلیلی این شیء قابل دسترسی نباشد، متغیر x ای هم وجود نخواهد داشت.