#c# #wndproc
Вопрос:
Я работал над надстройкой с видом на дерево. Но ошибка в элементе управления treeview портит двойные щелчки, потому что следующий щелчок игнорируется. Чего я хочу добиться, так это двойного щелчка, который читается как два одиночных щелчка. Я нашел решение этой проблемы, когда двойной щелчок всегда считывается как один щелчок. Код Ниже:
class MyTreeView : TreeView { protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == 0x0203) { m.Result = IntPtr.Zero; } else { base.WndProc(ref m); } } }
Этот метод WndProc не является моей рулевой рубкой и, вероятно, не будет в течение длительного времени. Но для этого дополнения мне нужно быстрое решение. Может ли кто-нибудь дать ответ о том, как добиться двойного щелчка до двух одиночных щелчков?
Комментарии:
1. Пытаться:
m.Msg = WM_LBUTTONDOWN
. (0x0201).2. Привет, доктор нуль, мне нужно добавить
m.Msg = 0x02001;
что-то позадиm.Result = IntPtr.Zero
?3. Заменить:
m.Result = IntPtr.Zero;
на:m.Msg = 0x0201
.4. Я попытался заменить
m.Result = IntPtr.Zero;
на:m.Msg = 0x0201
но это не работает. Я даже попытался добавитьm.Msg = 0x0202
(WM_LBUTTONUP) ниже WM_LBUTTOMDOWN, но это тоже не работает.
Ответ №1:
После еще некоторых поисков я нашел решение. Смотрите код ниже:
protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == 0x203) m.Msg = 0x201; base.WndProc(ref m); }
Ответ №2:
Просмотр дерева в Windows forms содержит два события: Щелчок и двойной щелчок. Вы можете заставить Doubleclick выполнить событие щелчка дважды, как это:
public Form1() { InitializeComponent(); treeView1.Click = TreeView1_Click; treeView1.DoubleClick = TreeView1_DoubleClick; } private void TreeView1_DoubleClick(object sender, EventArgs e) { TreeView1_Click(sender, e); TreeView1_Click(sender, e); } private void TreeView1_Click(object sender, EventArgs e) { System.Diagnostics.Debug.Print("Click"); }
Комментарии:
1. Привет, Майелк, ваше решение работает, когда элемент управления не является древовидным. Из-за ошибки, которая игнорирует щелчок после двойного щелчка. Важно, чтобы двойной щелчок никогда не регистрировался. В любом случае спасибо за быстрый ответ.