C# Измените двойной щелчок на два одиночных щелчка

#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. Привет, Майелк, ваше решение работает, когда элемент управления не является древовидным. Из-за ошибки, которая игнорирует щелчок после двойного щелчка. Важно, чтобы двойной щелчок никогда не регистрировался. В любом случае спасибо за быстрый ответ.