Keith™ 发表于 2018-9-8 18:15:53

选项板控件事件处理问题

我有一个调色板,像其他调色板一样,不会触发lostFocus事件。
实际上,发生的情况是我在调色板上托管了几个控件,当调色板不再具有焦点时,在调色板上具有焦点的控件保持焦点,而绑定到应该触发的控件的事件永远不会保持焦点
直接的问题是DataGridView具有可编辑的值,当不再编辑项目时,该值应该立即强制更新绘图中的关联对象。
以下事件已添加到datagrid、CellEndEdit、EditingControlShowing和(Column)KeyPress中,除CellEndEdit之外,这些事件将按预期方式触发。除非在关闭组件面板或继续执行其他操作之前,在组件面板中选择了不同的控件,否则它不会触发。
对于如何解决此问题,我将不胜感激。
**** Hidden Message *****

Keith™ 发表于 2018-9-8 22:50:19

ApplicationServices.PreTranslateMessage或System.Messaging.MessageQueue?
也许在句柄不是您的调色板的WM_SETFOCUS查找消息?
或WM_ACTIVATE /WA_INACTIVE,
或onMouseEnter

Keith™ 发表于 2018-9-13 23:07:07

我想我已经解决了这个问题,尽管似乎没有什么工作,因为事件在调色板中工作不太正常。
首先,我更改了更新绘图的位置。我没有在EndCellEdit中这样做,而是创建了另一个函数来使用更改的值更新绘图并消除了EndCellEdit事件。
我实现了EditingControlShow事件并将KeyPress、PreviewKeyDown和LostFocus添加到编辑控件
在PreviewKeyDown事件中,我过滤了回车键。如果用户按下Enter键,则调用该函数来更新绘图(该字段上的所有编辑都已完成)。
在KeyPress事件中,我过滤了所有对数字输入无效的值,这解决了在输入数据后必须解析数据的问题。
在文本框的LostFocus事件中,我格式化文本框中的值(此时编辑文本框仍然处于活动状态)并通过Enter键手动调用PreviewKeyDown(此事件不触发)。
因此,用户在网格中编辑一个值,如果将鼠标从调色板上移开,TextBox失去焦点,它用Enter键调用PreviewKeyDown,提交Enter,触发功能更新绘图,一切正常。

Keith™ 发表于 2018-9-17 07:38:13

很高兴你找到了工作,我玩了应用服务。PreTranslateMessage,创建了一堆p/调用,并放弃了lol
页: [1]
查看完整版本: 选项板控件事件处理问题