gpt4 book ai didi

c# - 为什么 PropertyGrid 不引发键盘/鼠标事件?

转载 作者:太空狗 更新时间:2023-10-29 18:00:19 26 4
gpt4 key购买 nike

为什么这永远不会被调用?

        propertyGrid.KeyDown += new KeyEventHandler(propertyGrid_KeyDown);

private void propertyGrid_KeyDown(object sender, KeyEventArgs e)
{
PoorLittleMethod(); //Never gets called
}

鼠标事件似乎也是如此

我在一些论坛上读到 PGrid 在引发此类事件时很棘手,因为它从 Control 继承了它们但并没有真正引发它们。真的吗 ?如果是,如何绕过它?

编辑 1:
因为这似乎是“常规的”,我发现 MS 很轻松地不在 propertyGrid 类的 MSDN 引用中明确指定这一点,并让事件“按原样”保留,就好像它们可用一样,但实际上它们不可用。像这些棘手的事情至少通常在引用文献中的“注释”中指定。

编辑 2:
我目前正在编写解决方法。我会尽快发布。

最佳答案

PropertyGridKeyDown 属性被标记为 Browsable(false) - 大概我们可以从中得出的结论是本身不受支持,但实际上作为其继承层次结构的副作用存在。

不过,有趣的是,它的 EditorBrowsable 属性(对于 Intellisense 等也是设计器指示器)设置为 EditorBrowsableState.Advanced - 我们期望的位置EditorBrowsableState.Never 如果前一个假设为真。

一些信息来自MSDN论坛概述了这种情况的原因:

来自工具 UI Spy我们可以看到 PropertyGrid 只是一个面板,它由三个 Windows 控件组成。我们的 KeyDown 事件应该由子控制表处理。结构:

-"pane" "PropertyGrid"
--"pane" "Description Pane"
--"table" "Properties Window"
--"tool bar" "ToolBar"

克服此问题的建议解决方案(也在 MSDN 链接中提供)是使用 native 系统调用来检索窗口/控件信息,子类 NativeWindow 并覆盖 WndProc方法来处理您喜欢的事件,在本例中为 KeyDown

关于c# - 为什么 PropertyGrid 不引发键盘/鼠标事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com