मैं, एक टाइमर जो क्रिया करने और MouseUp घटना पर यह बंद हो जाएगा शुरू करने के लिए MouseDown घटना संभाल कर सकते हैं लेकिन मैं को इस समस्या को हल करने का एक आसान तरीका ढूंढ रहा हूं।
आप पुन: प्रयोज्य तरीके से इसे लिखकर इसे आसान बना सकते हैं। आप अपना खुद का Button
कक्षा प्राप्त कर सकते हैं जिसमें यह व्यवहार है।
या एक वर्ग है कि आप किसी भी बटन को देते हैं यह इस व्यवहार देने के लिए कर सकते हैं लिखें।
class ButtonClickRepeater
{
public event EventHandler Click;
private Button button;
private Timer timer;
public ButtonClickRepeater(Button button, int interval)
{
if (button == null) throw new ArgumentNullException();
this.button = button;
button.MouseDown += new MouseEventHandler(button_MouseDown);
button.MouseUp += new MouseEventHandler(button_MouseUp);
button.Disposed += new EventHandler(button_Disposed);
timer = new Timer();
timer.Interval = interval;
timer.Tick += new EventHandler(timer_Tick);
}
void button_MouseDown(object sender, MouseEventArgs e)
{
OnClick(EventArgs.Empty);
timer.Start();
}
void button_MouseUp(object sender, MouseEventArgs e)
{
timer.Stop();
}
void button_Disposed(object sender, EventArgs e)
{
timer.Stop();
timer.Dispose();
}
void timer_Tick(object sender, EventArgs e)
{
OnClick(EventArgs.Empty);
}
protected void OnClick(EventArgs e)
{
if (Click != null) Click(button, e);
}
}
फिर आप इसका इस्तेमाल देंगी: उदाहरण के लिए: आप की तरह कुछ कर सकता है
private void Form1_Load(object sender, EventArgs e)
{
ButtonClickRepeater repeater = new ButtonClickRepeater(this.myButton, 1000);
repeater.Click += new EventHandler(repeater_Click);
}
या अधिक संक्षेप में, जब से तुम ButtonClickRepeater
के लिए एक संदर्भ रखने की जरूरत नहीं है:
private void Form1_Load(object sender, EventArgs e)
{
new ButtonClickRepeater(this.myBbutton, 1000).Click += new EventHandler(repeater_Click);
}
बेहतर भी MouseUp पर टिक घटना सदस्यता समाप्त करने के। –
भी टाइमर का निपटान करना न भूलें। – Joe
आप एक 'टाइमर' का उपयोग कर रहे हैं और अज्ञात विधि वास्तविक विधि लिखने के बजाय केवल एक छोटा रास्ता है। क्या यह फ्रेमवर्क 4.0 में मौजूद नहीं है? –