PDA

View Full Version : سوال: فراخوانی یک Button با کد



Salar Ashgi
جمعه 01 شهریور 1387, 12:26 عصر
سلام به همه عزیزان ، میخواستم بدونم که چه جوری میشه یک Button رو با کد نویسی

اجرا کرد (مثل اینکه روش کلیک شده) !!! ممنون و متشکر !!!! :لبخندساده:

Sajjad.Aghapour
جمعه 01 شهریور 1387, 14:07 عصر
خوب میتونی رویداد کلیک اون رو ایجاد و بعد متد اون رو هر موقع که دلت خواست فراخوانی کنی.......

Salar Ashgi
یک شنبه 10 شهریور 1387, 13:31 عصر
منظور من اینه که مثلا اگر منویی داریم ، و از منوی فایل روی یک آیتمی کلیک شد ، مثلا

Button1 اجرا بشه ؟؟؟؟!!!

niloofar norouzi
یک شنبه 10 شهریور 1387, 19:40 عصر
روی buttonمورد نظر کلیک کن و کد مربوطه را در همان قسمت بتویس
(دستوراتی که باید اجرا بشه)

Salar Ashgi
یک شنبه 10 شهریور 1387, 20:21 عصر
روی buttonمورد نظر کلیک کن و کد مربوطه را در همان قسمت بتویس
(دستوراتی که باید اجرا بشه)


==============================

لطفا در موردی که اطلاعات کافی ندارید ، نظر ندهید !!! :متفکر:

Salar Ashgi
یک شنبه 10 شهریور 1387, 20:22 عصر
خوب میتونی رویداد کلیک اون رو ایجاد و بعد متد اون رو هر موقع که دلت خواست فراخوانی کنی.......

***************************

دوست عزیز ، میشه یک کد نمونه واسه راهنمایی ارائه بدید !!!:لبخندساده:

Sajjad.Aghapour
یک شنبه 10 شهریور 1387, 20:26 عصر
داخل رویداد کلیک ایتم مورد نظر میتونی اینطوری بنویسی


button1_Click(sender, e);

Salar Ashgi
یک شنبه 10 شهریور 1387, 20:32 عصر
داخل رویداد کلیک ایتم مورد نظر میتونی اینطوری بنویسی


button1_Click(sender, e);



===============================

ممنون از کد کاربردی شما ، میشه یه کم در مورد sender توضیح بدین ؟؟؟

bsng110
یک شنبه 10 شهریور 1387, 20:33 عصر
هوالحکیم! سلام! این کار کاملاً غیر اصولی است. فرض کنید که هنوز برای کلیدی رویداد کلیک آن پیاده سازی نشده است، آن وقت چه؟ باید از متد PerformClick مربوط به Button استفاده کرد. این متد طوری نوشته شده است که چنانچه این رویداد خالی هم بود، کار می کند(عکس العملی ندارد) و چنانچه رویداد دارای delegate بود، عمل کرده و delegate ها اجرا می شوند. یا علی. حق نگهدارتان

Salar Ashgi
یک شنبه 10 شهریور 1387, 20:39 عصر
هوالحکیم! سلام! این کار کاملاً غیر اصولی است. فرض کنید که هنوز برای کلیدی رویداد کلیک آن پیاده سازی نشده است، آن وقت چه؟ باید از متد PerformClick مربوط به Button استفاده کرد. این متد طوری نوشته شده است که چنانچه این رویداد خالی هم بود، کار می کند(عکس العملی ندارد) و چنانچه رویداد دارای delegate بود، عمل کرده و delegate ها اجرا می شوند. یا علی. حق نگهدارتان

==========================

اگه اینجوری بود (یعنی رویداد کلیک باتن پیاده سازی نشده بود) که این سوال بی معنا بود ،

ما فرض رو بر این می گذاریم که پیاده سازی شده !!!!

در ضمن دوست عزیز همیشه قسمت پر لیوان رو ببین نه قسمت خالیشو !!!!

Sajjad.Aghapour
یک شنبه 10 شهریور 1387, 20:55 عصر
بله دوست عزیز.کاملا حق با شماست.این گونه کد نویسی اشکال داره.یعنی اشکالش این نیست که نگران پیاده سازی رویداد کلیک باشیم.بلکه اگه مثلا در متد کلیک دکمه بخواهیم از casting ،شئ sender رو به button تبدیل کنیم در این صورت خطا رخ میده.
اگر رویداد کلیک پیاده سازی نشده باشه میتونید به این صورت اون رو پیاده سازی کنید


this.button1.Click += new EventHandler(this.button1_Click);

اما کدی که من گذاشتم در صورتی درست عمل خواهد کرد که یه همچین کدی در رویداد کلیک دکمه نداشته باشیم


Button btn = (Button)sender;

موفق باشید....

Salar Ashgi
یک شنبه 10 شهریور 1387, 21:41 عصر
بله دوست عزیز.کاملا حق با شماست.این گونه کد نویسی اشکال داره.یعنی اشکالش این نیست که نگران پیاده سازی رویداد کلیک باشیم.بلکه اگه مثلا در متد کلیک دکمه بخواهیم از casting ،شئ sender رو به button تبدیل کنیم در این صورت خطا رخ میده.
اگر رویداد کلیک پیاده سازی نشده باشه میتونید به این صورت اون رو پیاده سازی کنید


this.button1.Click += new EventHandler(this.button1_Click);

اما کدی که من گذاشتم در صورتی درست عمل خواهد کرد که یه همچین کدی در رویداد کلیک دکمه نداشته باشیم


Button btn = (Button)sender;

موفق باشید....

________________________:لبخندساده:______ _______________

دوست عزیز میشه کمی در مورد آبجکت sender توضیح بدید ؟؟؟ ممنونم !!!

Sajjad.Aghapour
یک شنبه 10 شهریور 1387, 22:35 عصر
من همین طوری ساده برات توضیح میدم....
sender یعنی فرستنده.وقتی شما روی یک دکمه کلیک می کنید در اصل sender نماینده دکمه شما در متد مربوط به رویداد کلیک دکمه خواهد بود.لذا شما می تونید مثلا با casting اون رو به هویت واقعیش تبدیل کنید...
یه مثال کاربردی براتون می زنم.....
فرض کنید شما یک منو دارید که تعداد زیادی آیتم داره.خوب اگه بخواین واسه هر آیتم یه رویداد کلیک تعریف کنید یه چهره زشتی به کداتون میده.خوب میتونید به صورت زیر از این امر جلوگیری کنید و همه رویدادها رو داخل یه رویداد جمع کنید و کد نویسی کنید....


private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem item = (ToolStripMenuItem)sender;
switch (item.Name)
{
case "openToolStripMenuItem":
MessageBox.Show("open");
break;
case "saveToolStripMenuItem":
MessageBox.Show("Save");
break;
case "saveAsToolStripMenuItem":
MessageBox.Show("Save As");
break;
}
}

و رویداد کلیک ایتم دیگه رو برابر این متد قرار بدید.می بینید که به این صورت کلی از شلوغی تعریف متدها کاسته میشه و شما شما یک متد برای همه آیتم ها خواهید داشت

Amir Oveisi
دوشنبه 11 شهریور 1387, 01:04 صبح
در ضمن دوست عزیز همیشه قسمت پر لیوان رو ببین نه قسمت خالیشو !!!!
ولی تو برنامه نویسی برعکسه!

من یه پیشنهاد بهتری دارم، میتونین کارایی که تو متد مربوط به کلیک button باید انجام بشن رو تو یه متد دیگه بنویسین، بعد هم تو متد کلیک button‌و هم متد کلیک menu‌تون اون متد اولی رو اجرا کنید.

موفق باشید
jooje

piroozman
دوشنبه 11 شهریور 1387, 01:19 صبح
ولی تو برنامه نویسی برعکسه!

من یه پیشنهاد بهتری دارم، میتونین کارایی که تو متد مربوط به کلیک button باید انجام بشن رو تو یه متد دیگه بنویسین، بعد هم تو متد کلیک button‌و هم متد کلیک menu‌تون اون متد اولی رو اجرا کنید.

موفق باشید
jooje
مشکلی دارم که خیلی شبیه مشکل این دوست عزیزمون است که این تاپیک رو اجرا کرده. من هم می خوام رویداد یکی از کامپوننتهای(مثلا یکی از دستور ات موجود در یک منو در فرم اصلی) موجود در فرم اصلی را در یک فرم دیگر (که فرم فرزند فرم اصلی (یا والد) است) صدا بزنم. امکانش هست؟

Amir Oveisi
دوشنبه 11 شهریور 1387, 01:32 صبح
عرض کردم ، بنده توصیه میکنم که اون کار مشترکی که میخواین هر دو رویداد انجامش بدن رو بصورت یک متد مجزا تعریف کنید و این متد رو در هر دو رویداد مورد نظر فراخوانی کنید.

Salar Ashgi
دوشنبه 11 شهریور 1387, 07:31 صبح
ولی تو برنامه نویسی برعکسه!

من یه پیشنهاد بهتری دارم، میتونین کارایی که تو متد مربوط به کلیک button باید انجام بشن رو تو یه متد دیگه بنویسین، بعد هم تو متد کلیک button‌و هم متد کلیک menu‌تون اون متد اولی رو اجرا کنید.

موفق باشید
jooje

====================================

من خودم این روش رو میدونستم ، ولی چون طولانیه و زمانبر ، ازش استفاده نکردم !!!


ولی تو برنامه نویسی برعکسه

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

Mahdi.Kiani
دوشنبه 11 شهریور 1387, 08:35 صبح
====================================

ولی چون طولانیه و زمانبر ، ازش استفاده نکردم !!!




طولانی و زمانبر؟
ممکنه بگید کجاش طولانی و زمانبره؟
به هر حال bermooda روش درستی را پیشنهاد کردند..
-------------------------------------------------------------
در مورد سوال کاربر piroozan :
می تونین خودتون یک رویداد در فرم جدید ایجاد کنید و از آن در فرم اصلی ( در اینجا منظور، فرمی است که می خواهید عملیات یا کد های بخشی از آن را اجرا کنید) استفاده کنید...

Salar Ashgi
دوشنبه 11 شهریور 1387, 11:26 صبح
ممکنه بگید کجاش طولانی و زمانبره؟
به هر حال bermooda روش درستی را پیشنهاد کردند..


شما بجای اینکه به کد برنامه چیزی رو اضافه کنی و دوبار اونو فراخوانی کنی ، یه بار تو باتن

و یه بار هم تو آیتم ، یه بار یک کد ساده رو توی آیتم مینویسی !!! البته میدونم که این روش

بهترین نیست ولی پیاده سازیش ساده است !!! البته که روش bermooda کاملا درست و

منطقی است !!! ولی گفتم این روش رو خودم نوشته بودم و روشی غیر از این میخواستم که

حل شد !!!