|
> イベントの発生順序が先なもので、失敗しました。
確かにDoubleClick系のイベントより先にBeforeExpandイベントが発生するので、
既存のイベント使った判断ではうまく行きませんね。
他にも方法があるかもしれないので、ベストな方法かどうかはわかりませんが、
BeforeExpandイベントより先にDoubleClickを通知するイベントを用意することで一応実現できます。
以下のようにTreeViewの継承クラスを作り、WndProcをオーバーライドして自前でイベントを起こします。
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool isMouseDoubleClicked = false;
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (isMouseDoubleClicked)
{
isMouseDoubleClicked = false;
e.Cancel = true;
}
}
private void treeView1_DoubleClickBeforeExpand(object sender, EventArgs e)
{
isMouseDoubleClicked = true;
}
}
public class TreeViewEx : TreeView
{
private const int WM_LBUTTONDBLCLK = 0x203;
public event EventHandler DoubleClickBeforeExpand;
protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case WM_LBUTTONDBLCLK:
if (this.DoubleClickBeforeExpand != null)
this.DoubleClickBeforeExpand(this, EventArgs.Empty);
break;
}
base.WndProc(ref m);
}
}
}
|