我正在尝试实现一个简单的 Windows 窗体应用程序,用户可以在其中编辑简单的 Person 类的实例。该应用程序利用标准 propertygrid,将 Person 类的实例分配给 propertygrid 的 SelectedObject 属性。当用户单击菜单项“保存”时,应用程序从属性网格中获取所选项目并保存它。这工作得很好。
但是,如果使用分配给菜单项的快捷键(例如 ctrl+S)来保存属性网格的 SelectedObject,则不会拾取更改。这似乎与以下事实有关:除非 propertygrid 中的字段失去焦点,否则 Person 对象的属性不会更新,并且 ctrl+S 快捷键不会从 propertygrid 中的字段夺走焦点。
其他开发人员,例如 Mark Gilbert,已经通过强制将焦点从 propertygrid 上移开来解决了这个问题,但这似乎有点像黑客,特别是因为将焦点保持在现场会很好。 Visual Studio 开发人员显然是正确的,但我还没有弄清楚如何做到这一点。
最佳答案
您有两种不同的方法:
正如 Mark Gilbert 和 @Tergiver 所解释的,您可以从就地控件中删除焦点,该控件将在触发菜单命令之前提交值更改。由于您必须从 OnSave 处理程序执行此操作,因此您需要从那里对网格进行依赖。
您也可以反其道而行之。从 PropertyGrid 派生并覆盖 ProcessCmdKey。如果检测到 Ctrl+S,请将焦点更改为网格本身,然后调用 base.ProcessCmdKey()。与第 1 点相反,这依赖于网格中应用程序的快捷键(至少 Ctrl+S)。我应该补充一点,我没有尝试过这种方法,但理论上它应该有效。
你的选择...
关于winforms - 使用菜单快捷方式保存时未拾取 Propertygrid 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957383/