winforms - 使用菜单快捷方式保存时未拾取 Propertygrid 更改

标签 winforms propertygrid

我正在尝试实现一个简单的 Windows 窗体应用程序,用户可以在其中编辑简单的 Person 类的实例。该应用程序利用标准 propertygrid,将 Person 类的实例分配给 propertygrid 的 SelectedObject 属性。当用户单击菜单项“保存”时,应用程序从属性网格中获取所选项目并保存它。这工作得很好。

但是,如果使用分配给菜单项的快捷键(例如 ctrl+S)来保存属性网格的 SelectedObject,则不会拾取更改。这似乎与以下事实有关:除非 propertygrid 中的字段失去焦点,否则 Person 对象的属性不会更新,并且 ctrl+S 快捷键不会从 propertygrid 中的字段夺走焦点。

其他开发人员,例如 Mark Gilbert,已经通过强制将焦点从 propertygrid 上移开来解决了这个问题,但这似乎有点像黑客,特别是因为将焦点保持在现场会很好。 Visual Studio 开发人员显然是正确的,但我还没有弄清楚如何做到这一点。

最佳答案

您有两种不同的方法:

  1. 正如 Mark Gilbert 和 @Tergiver 所解释的,您可以从就地控件中删除焦点,该控件将在触发菜单命令之前提交值更改。由于您必须从 OnSave 处理程序执行此操作,因此您需要从那里对网格进行依赖。

  2. 您也可以反其道而行之。从 PropertyGrid 派生并覆盖 ProcessCmdKey。如果检测到 Ctrl+S,请将焦点更改为网格本身,然后调用 base.ProcessCmdKey()。与第 1 点相反,这依赖于网格中应用程序的快捷键(至少 Ctrl+S)。我应该补充一点,我没有尝试过这种方法,但理论上它应该有效。

你的选择...

关于winforms - 使用菜单快捷方式保存时未拾取 Propertygrid 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957383/

相关文章:

c# - 根据每个列表项的 bool 值添加或减去一个值

c# - 在 PropertyGrid 的集合编辑器中更改类型名称

c# 窗体控件中的嵌套类(子类) “property grid”

c# 将 winforms 图表绑定(bind)到对象列表

winforms - 有没有可以生成Winform代码的应用程序?

c# - RichTextBox 的只读内容不显示图像

C# WPF 属性网格文件浏览器

c# - 为什么A*找不到最优路径?

c# - 如何获取 PropertyGrid 的单元格值 (c#)?

.net - 在 WPF PropertyGrid 中实现验证