Практическое руководство. Создание пользовательских событий двойного щелчка
Обновлен: Ноябрь 2007
Платформа .NET Compact Framework не поддерживает событие кнопки DoubleClick Windows Forms. Но можно создать элемент управления, производный от класса Button, реализующий это событие.
Создание пользовательского события двойного щелчка
Создайте класс, производный от класса System.Windows.Forms.Button.
Объявите событие DoubleClick.
Перегрузите метод OnClick кодом, вызывающим событие DoubleClick при двойном нажатии кнопки за указанное время.
Пример
В этом примере создается пользовательский элемент управления DoubleClickButton, который реализуется на форме.
using System;
using System.Windows.Forms;
using System.Drawing;
namespace ButtonDClick
{
public class Form1 : System.Windows.Forms.Form
{
// Track the number of
// double-clicks with the count variable.
int count = 0;
public Form1()
{
InitializeComponent();
// Display OK button for closing.
this.MinimizeBox = false;
// Create an instance of the DoubleClickButton class.
DoubleClickButton dClickB = new DoubleClickButton();
dClickB.Bounds = new Rectangle(10,10,200,30);
dClickB.Text = "Double-click me!";
Controls.Add(dClickB);
// Add the DClick event hander to the DoubleClick event.
dClickB.DoubleClick += new EventHandler(DClick);
}
protected override void Dispose( bool disposing )
{
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.Text = "Form1";
}
private void DClick(object o, EventArgs e)
{
// Display the number of double-clicks.
MessageBox.Show("Double-click count = " + ++count);
}
static void Main()
{
Application.Run(new Form1());
}
// Derive a button with extended funtionality
// from the Button class.
public class DoubleClickButton : System.Windows.Forms.Button
{
// Note that the DoubleClickTime property gets
// the maximum number of milliseconds allowed between
// mouse clicks for a double-click to be valid.
int previousClick = SystemInformation.DoubleClickTime;
public new event EventHandler DoubleClick;
protected override void OnClick(EventArgs e)
{
int now = System.Environment.TickCount;
// A double-click is detected if the the time elapsed
// since the last click is within DoubleClickTime.
if ( now - previousClick <= SystemInformation.DoubleClickTime)
{
// Raise the DoubleClick event.
if (DoubleClick != null)
DoubleClick(this,EventArgs.Empty);
}
// Set previousClick to now so that
// subsequent double-clicks can be detected.
previousClick = now;
// Allow the base class to raise the regular Click event.
base.OnClick(e);
}
// Event handling code for the DoubleClick event.
protected new virtual void OnDoubleClick(EventArgs e)
{
if (this.DoubleClick != null)
this.DoubleClick(this, e);
}
}
}
}
Компиляция кода
Для этого примера требуются ссылки на следующие пространства имен:
Microsoft.VisualBasic (необязательный)