我需要在ReadOnly DataGrid(不幸地不是DataGridView)中双击单元格时处理该事件,但MouseDoubleClick事件不是被解雇。我怎样才能让事件火起来?在System.Windows.Forms.DataGrid中双击单元格时,未触发MouseDoubleClick事件
我创建的DataGrid和订阅事件:
var table = new DataTable();
table.Columns.Add("foo");
table.Rows.Add(new object[] { "foo" });
table.Rows.Add(new object[] { "foo" });
dataGrid1.DataSource = table;
dataGrid1.MouseDoubleClick += DataGrid1_MouseDoubleClick;
dataGrid1.ReadOnly = true;
时,只有当我双击单元格之间的边界。当我点击细胞上的只读文本框看起来这似乎吃第二次点击事件:
我发现an old thread in Experts Exchange,他们说的那样多:
好,不仅是点击单元格时,双击事件不会被捕获,它不会被数据网格消息队列捕获。我继承了一个datagrid并重写了wndproc,检查是否可以检测到双击。它捕获点击消息,但没有WM_LBUTTONDBLCLK消息通过。我怀疑MS有子单元格控件(请参阅DataGridColumnStyle类和派生类)挂钩网格控件,并阻止消息甚至继续到网格。试图预先钩住那个孩子或网格可能会有非常混乱的结果,所以我正在避免这种情况。
我并不真的需要TextBox控件所以如果从“激活”或显示其抑制细胞的一种方式,这将是对我来说是足够好的解决方案,以及。
注意:我知道DataGrid已经过时,但我正在处理遗留代码,请不要评论告诉我使用DataGridView - 它不会帮助我。
你能在一个细胞,而不是双击处理简单的单击事件? – Nofuzy
如果你不需要网格激活,你可以在顶部放一个透明的控件来捕捉鼠标点击? – Equalsk
@Equalsk有趣的想法。控件必须随着Grid一起调整大小,但也许我可以通过锚定实现。它必须在单元格之上,因为我确实希望能够单击标题行 - 调整列宽的大小,并更改排序。 – sashoalm