Не похоже, что вы можете сделать это с помощью стандартных обработчиков событий WinForms (DoubleClick
и MouseDoubleClick
не дают вам способа подавить поведение по умолчанию), но вы можете сделать это, создав пользовательский WndProc
и обрабатывать оконные сообщения самостоятельно.
В приведенном ниже примере я переопределяю значение по умолчанию Control.WndProc
в создаваемом мной классе PreviewTextBox
. Через этот класс я раскрываю событие PreviewDoubleClick
, которое, если обрабатывается в клиентском коде, может использоваться для подавления поведения двойного щелчка по умолчанию, задав e.Handled = true;
. В этом примере событие обрабатывается в обработчике события OnPreviewDoubleClick
, где вы можете добавить свой собственный код, чтобы реагировать на двойной щелчок, как вам угодно.
Если вам нужна дополнительная информация о двойном щелчке мышью, я думаю, вы можете получить ее через поля Message.LParam
/ Message.WParam
в WndProc
.
(код ниже предполагает, что у вас есть некоторый код для уже настроенной формы)
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
class DoubleClickEventArgs : EventArgs
{
public bool Handled
{
get;
set;
}
}
class PreviewTextBox : TextBox
{
public event EventHandler<DoubleClickEventArgs> PreviewDoubleClick;
protected override void WndProc(ref Message m)
{
if ((m.Msg == WM_DBLCLICK) || (m.Msg == WM_LBUTTONDBLCLK))
{
var e = new DoubleClickEventArgs();
if (PreviewDoubleClick != null)
PreviewDoubleClick(this, e);
if (e.Handled)
return;
}
base.WndProc(ref m);
}
const int WM_DBLCLICK = 0xA3;
const int WM_LBUTTONDBLCLK = 0x203;
}
public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();
_textBox = new PreviewTextBox();
_textBox.Text = "Test text foo bar";
_textBox.PreviewDoubleClick += new EventHandler<DoubleClickEventArgs>(OnPreviewDoubleClick);
Controls.Add(_textBox);
}
void OnPreviewDoubleClick(object sender, DoubleClickEventArgs e)
{
e.Handled = true;
}
PreviewTextBox _textBox;
}
}