PDA

View Full Version : سوال: ایجاد یک نوع event خاص برای همه دکمه ها



voice.of.silence
دوشنبه 23 مرداد 1391, 12:25 عصر
سلام دوستان:
من می خوام برای همه ی دکمه ها یک event خاص را ایجاد کنم برای mouse events and Key events. .
به دلیل تعداد زیاد دکمه ها کار خسته کننده است حال می خوام بدانم که آیا راه حلی است که یک رویدات را برای همه ی دکمه ها نوشت به صورت سریع . تا کار تکراری به نظر نرسد .

با سپاس.
Voice of Silence:متفکر:

hakim22
دوشنبه 23 مرداد 1391, 12:40 عصر
با استفاده از عملگر += میشه رویدادهای یک شی رو به یک شی دیگه منتقل کرد :

myButton1.Click += new MyButtonClick;
myButton2.Click += new MyButtonClick;
myButton3.Click += new MyButtonClick;
myButton4.Click += new MyButtonClick;
myButton5.Click += new MyButtonClick;
myButton6.Click += new MyButtonClick;

void MyButtonClick(object sender, EventArgs e)
{
Button button = sender as Button;
//here you can check which button was clicked by the sender
}


البته اگر نمی خواهید که یکی یکی دکمه ها رو به یک رویداد وصل کنید میشه با استفاده از یک حلقه هم اونها رو وصل کرد. مشکلش پیدا کردن دکمه های مورد نظر از توی فرمه
باز یک راه اینه که همه ی دکمه هایی که قصد دارید به یک رویداد خاص وصل کنید با استفاده از خاصیت tag علامت گزاری کنید ، مثلا مقدار tag را روی یک عدد یا عبارت خاص تنظیم کنید بعد با کدی مثل این اونها رو شناسایی کنید :

public void SetButtonClick(Control parent)
{
if (parent is Button)
{
(parent as Button).Click += new EventHandler(this.Mymethod);
}
foreach (Control item in parent.Controls)
{
SetButtonClick(item);
}
}


البته یک if برای بررسی خاصیت tag در این کد جا مونده !

این کد باید درون سازنده ی فرم جا بگیره

مهرداد صفا
دوشنبه 23 مرداد 1391, 21:50 عصر
سلام دوستان:
من می خوام برای همه ی دکمه ها یک event خاص را ایجاد کنم برای mouse events and Key events. .
به دلیل تعداد زیاد دکمه ها کار خسته کننده است حال می خوام بدانم که آیا راه حلی است که یک رویدات را برای همه ی دکمه ها نوشت به صورت سریع . تا کار تکراری به نظر نرسد .

با سپاس.
Voice of Silence:متفکر:
سلام
در کد زیر از یک متود برای handle کردن رویداد MouseMove و GotFocus مربوط به تمام کنترلهای موجود در فرم استفاده میکنیم

//in the name of god
//sal allaho ala mohammad va aleh


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
foreach (Control ThisControl in this.Controls)
{
ThisControl.MouseMove += new MouseEventHandler(OnMouseMove);
ThisControl.GotFocus += new EventHandler(OnMouseMove);

}
}
private void OnMouseMove(object sender ,EventArgs e)
{
(sender as Control).BackColor=Color.Black;


}
}

}