PDA

View Full Version : تبدیل نام کامپوننت به اسم تابع و اجرای ان



djscsi
شنبه 19 آذر 1390, 22:14 عصر
سلام دوستان راهی هست که تو رویداد مثلا یه button نام اون رو بگیرم و مثلا بهش یه "_doit" اضافه کنم تا بشه نام یه تابع و بگم که اون تابع رو اجرا کن مثلا

void button2_doit()
{
MessageBox.Show("ok");
}
private void button2_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
btn.Name + "_doit()";
}

system32
شنبه 19 آذر 1390, 22:28 عصر
می شه بگید برای چی این کد رو می خواید شاید بشه راه ساده تری براش پیدا کرد.

reza_mostafavi63
شنبه 19 آذر 1390, 22:40 عصر
ميخواي چي كار كني ؟

djscsi
یک شنبه 20 آذر 1390, 17:12 عصر
توضیحش طولانی فقط بدون خیلی نیاز دارم
سعی می کنم توضیحش رو سر فرصت تایپ کنم بزار ماینجا. فعلا فقط مهم انجام این کاره. راههس سراغ ندارید؟

gwbasic
یک شنبه 20 آذر 1390, 17:43 عصر
می تونی این کارو انجام بدی ولی اگه بیشتر توضیح می دادی برای چی این کارو می خوای بکنی قطعا راه بهتری هست. به احتمال زیاد طراحیت ایراد داره ولی به هر حال به این صورت می تونی عمل کنی:
فرض کلاسی که می خوای اون متد رو صدا بزنی اسمش هست MyClass و instance ای که روی اون می خوای متد مورد نظر ( مثلا MyMethod) رو صدا بزنی myClass هست کافیه کد زیر رو بنویسی:


object obj = typeof(MyClass).InvokeMember("MyMethod", System.Reflection.BindingFlags.InvokeMethod, null myClass, null);

djscsi
دوشنبه 21 آذر 1390, 18:03 عصر
ببینید من یه برنامه دارم که توش 30-40 تا checkboxه . که هر کدوم رویداد checkedchange دارن
حالا قراره به جای اون چک باکسها از button استفاده بشه پس من باید بیام بشینم دونه دونه بجاشون button بزارم و رویدادد checkedchange رو به click این نصبت بدم یا می تونم تو یه حلقه بگم خودش button ها رو ایجاد کنه و رو فرم بزاره و با توجه به اسم چک باکس رویداد checkedchange اون رو به button بدم .
اینم بگم که اسن هر چک باکس با اسم buttonی که قراره جاشو بگیره یکیه .
حالا پیشنهاد شکما چیه؟
ممنون

Mahmoud Zaad
دوشنبه 21 آذر 1390, 18:15 عصر
کاری که توی رویداد checkedchange و کلیک انجام میشه یکسانه؟

gwbasic
دوشنبه 21 آذر 1390, 18:16 عصر
شما بهتره بگی که چیو می خوای پیاده سازی کنی؟ مگه داری بازی می نویسی که 30 - 40 تا Button باید داشته باشه.کاربر بیچاره باید تک تک این Button ها رو بدونه چیه ؟!؟!؟ یا اینکه پشت این Button ها یک منطق حاکمه؟
بعید می دونم فرمی به این تعداد Button نیاز داشته باشه !!!

djscsi
دوشنبه 21 آذر 1390, 21:20 عصر
ممنون از جوابتون

کاری که توی رویداد checkedchange و کلیک انجام میشه یکسانه؟بله کار یکسانه .

بعید می دونم فرمی به این تعداد Button نیاز داشته باشه !!!بعید ندونید چون هست .کاربر هم به مشکل بر منیخره اصلا این کار برای user friendly شدن بیشتنر برنامس

linux
دوشنبه 21 آذر 1390, 22:32 عصر
ممنون از جوابتون
بله کار یکسانه .
بعید ندونید چون هست .کاربر هم به مشکل بر منیخره اصلا این کار برای user friendly شدن بیشتنر برنامس

منم موافقم که در طراحی یک جایی را دچار اشکال شدید.
در هر صورت اگر کار یکسان هست کلا روش این هست که یک کلاس button جدید درست کنید که از کلاس button ویندوز به ارث رفته باشد و در هر متدی را که دوست دارید خصوصی سازی کنید و بعد از این button جدید در فرم خودتان استفاده کنید.
اگر اشکالی ندارد و ممکن هست یک عکسی از این فرم خودتان اینجا بگذارید تا ما هم ببنیم.

linux
دوشنبه 21 آذر 1390, 22:44 عصر
public Form2()
{
InitializeComponent();
foreach (var b in this.Controls)
{
if (b is Button)
{
Button bb = (Button)b;
bb.Click += new EventHandler(BtnClick);
}
}
}

private void BtnClick(object sender, EventArgs e)
{
MessageBox.Show(string.Format("You click on {0}", ((Button)sender).Name));
}
اینجوری هم می تونی بنویسی

Mahmoud Zaad
سه شنبه 22 آذر 1390, 11:23 صبح
با این شرایطی که شما می فرمایید شما با ظاهر چک باکس مشکل دارید و می خواید اون رو به صورت باتن نشون بدید چون میگید که کاری که توی رویداد کلیک باتن و checkedchange چک باکس انجام میشه یکسانه. توی چک باکس دو حالت داریم یا چک شده یا نشده ولی باتن که اینطور نیست. به فرض که شما کدها رو هم به باتن نسبت دادید تازه باید پیدا کنید که چند بار روش کلیک شده که شرطهای if یا else اعمال بشن و ... . همون چک باکس یه خاصیتی داره به اسم appearance اون رو روی حالت باتن قرار بدید.

djscsi
سه شنبه 22 آذر 1390, 21:43 عصر
1-ممنون maysamfthi جان ولی کد های نوشته شده در checkbox با button تداخل نشده یعنی اینکه checkbox در حالت انتخاب هست یا نه مهم نیوده (فقط دلیلش رو نپرسید که از بحث دور نشیم)
2- ممنون linux جان ولی این کد هست فقط اینجا bb.Click += new EventHandler(BtnClick); باید اسم رویداد checkbox نوشته بشه و سوال منم همینه که میشه این کارو کرد یا نه