为什么这永远不会被召唤?
propertyGrid.KeyDown += new KeyEventHandler(propertyGrid_KeyDown);
private void propertyGrid_KeyDown(object sender, KeyEventArgs e)
{
PoorLittleMethod(); //Never gets called
}
Run Code Online (Sandbox Code Playgroud)
这似乎与鼠标事件相同
I'veread一些论坛,PGrid是提高此类事件,因为它继承他们的控制,但并没有真正提高他们棘手.真的吗 ?如果是,如何绕过?
编辑1:
由于这似乎是"常规",我发现MS非常轻,不要在propertyGrid类的MSDN参考上明确指定这一点,并将事件"原样"保留为好像它们可用,而它们不是.这些棘手的东西至少通常在refs里面的"notes"中指定.
编辑2:
我正在编写一个解决方法.我很快就会发布它.
的PropertyGrid属性KeyDown被标记为Browsable(false)- 大概我们可以从中得出的结论是,它本身不受支持,但实际上作为其继承层次结构的副作用而存在。
不过,有趣的是,它的EditorBrowsable属性(这也是智能感知等的设计指标)被设置为-如果前一个假设成立,EditorBrowsableState.Advanced我们期望的位置。EditorBrowsableState.Never
MSDN论坛上的一些信息概述了出现这种情况的原因:
从UI Spy工具中我们可以看到PropertyGrid只是一个面板,它由三个Windows控件组成。我们的 KeyDown 事件应该由子控制表处理。结构:
-"pane" "PropertyGrid"
--"pane" "Description Pane"
--"table" "Properties Window"
--"tool bar" "ToolBar"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,克服此问题的建议解决方案(也在 MSDN 链接中提供)是使用本机系统调用来检索窗口/控件信息、子类化NativeWindow并重写WndProc方法来处理您喜欢的事件KeyDown。