سلام به همه ی دوستان می خواستم من را در این مشکل کمک کنید و از مدیر بخش می خواهم که من را کمک کند
مشکل من این است که در سی شارپ دات نت من یک فرم ایجاد می کنم و روی آن دو دکمه یا button قرار می دهم و
Enable آنها یا حالت فعال بودن آنها را false می کنم و یک فرم دیگر به اسم Form2.cs را ایجاد می کنم و یک button روی آن قرار می دهم و در داخل رویداد کلیک button آن می خواهم کدی بنویسم که با زدن دکمه در فرم 2 . دکمه های غیر فعال من در فرم 1 را فعال کند . ولی من هرچی در فرم دو می خواهم دکمه های فرم 1 را فعال کنم اصلا اسمی از دکمه های فرم 1 نمی شناسد چه کار کنم تا بشناسد و هم باعث فعال شدن دکمه های فرم یک شود .ممنون می شم کمک کنید
ابتدا یک توضیح مختصر در مورد کلاس ها و شیء هایی که از رویشان ساخته می شود می دهم.
فرض کنید که من یک کلاس به اسم Class1 دارم که یک متد به اسم Show و یک متغیر به اسم message
داخلش هست که هر دویشان هم public هستند و از بیرون کلاس می توان به آنها دسترسی داشت :
کد:
public class Class1
{
public string message = "test";
public void Show()
{
MessageBox.Show(message);
}
}
حالا به نظر شما من می توانم در کد برنامه ام متد Show داخل کلاس را اینطوری فراخوانی کنم؟
نه، خطا می دهد و این کد بالا اشتباه است، چون Class1 اسم خود کلاس است. من اول باید یک شیء از آن کلاس
مثلا با اسم c1 بسازم و توسط آن شیء c1 متد Show را فراخوانی کنم :
کد:
Class1 c1 = new Class1();
c1.Show();
کد بالا را می توانم اینطوری در یک سطر خلاصه کنم، اما چون اسم متغیر c1 را ثبت نمی کند بعدا نمی توانم
به اسم شیء دسترسی داشته باشم :
موقعی که کد اجرا می گردد، پیغام test را نمایش می دهد، چون در متغیر message مقدار test ذخیره شده.
اگر بخواهم متن این پیغام را تغییر دهم باید ابتدا مقدار متغیر message را عوض کنم :
کد:
Class1 c1 = new Class1();
c1.message = "sample";
c1.Show();
در زبان #C فرم ها و دکمه ها بصورت پیشفرض یک کلاس هستند که شما برای استفاده از نوع آن کلاس ها شیء
می سازید. به عنوان مثال زمانی که برنامه شما با نمایش فرم Form1 شروع می شود این کد در فایل Program.cs
اجرا می گردد :
کد:
Application.Run(new Form1());
در کد بالا به آن کلمه new Form1 توجه کنید، شیء از کلاس Form1 ایجاد میشه که متاسفانه بصورت پیشفرض
جایی هم اسم شیء ثبت نشده، حالا اگر شما در داخل کد های Form2 بخواهید به یک دکمه در این شیء
اشاره کنید، نام کلاس را می دانید (Form1) اما به شیء ای که از روی آن ساخته شده دسترسی ندارید.
برای اینکه بتوانید در کدی خارج از کلاس Form1 به متغیر ها و اشیاء درون کلاس Form1 دسترسی داشته باشید
اولا باید اسم شیء ای از کلاس Form1 می سازید را در متغیری نگهداری کنید و ثانیا اشیاء و متغیر هایی که
می خواهید به آنها دسترسی داشته باشید از نوع private نباشند.
مرحله اول - شیء ای که از کلاس Form1 می سازید را در متغیری عمومی و استاتیک ثبت کنید
کد Program.cs را باز کنید و ابتدای کلاس Program یک متغیر عمومی و استاتیک از نوع Form1 بسازید :
کد:
[COLOR="Gray"] static class Program
{[/COLOR]
static public Form1 f1;
.
.
.
و سپس کد (()Application.Run(new Form1 داخل متد ()Main را با این دو سطر تعویض کنید :
کد:
f1 = new Form1();
Application.Run(f1);
حالا شما می توانید داخل فرم Form2 یا هر کد دیگری به شیء Program.f1 دسترسی داشته باشید.
مرحله دوم - اشیاء، متغیر ها و کنترل هایی که باید به آنها دسترسی داشته باشید را public کنید
بصورت پیشفرض دکمه های درون فرم Form1 از نوع private هستند، باید در پنجره Properties مشخصه
Modifiers شان را به Public تغییر دهید. اینکار را در مورد دکمه هایی که داخل Form1 هستند و باید از
داخل Form2 بهشان دسترسی داشته باشید انجام دهید.
حالا مثلا می توانید با کد زیر دکمه button1 را از درون فرم Form2 فعال کنید :
کد:
Program.f1.button1.Enabled = true;