为什么PropertyGrid不会引发键盘/鼠标事件?

Meh*_*ANI 9 c# winforms

为什么这永远不会被召唤?

        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:
我正在编写一个解决方法.我很快就会发布它.

Gra*_*mas 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。