使用菜单快捷方式进行保存时,不会拾取Propertygrid更改

时间:2011-02-10 12:59:43

标签: winforms propertygrid

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

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

其他开发人员,比如马克吉尔伯特,已经解决了这个问题,迫使焦点从属性网格中消失,但这似乎有点像黑客,特别是因为将重点放在现场是很好的。 Visual Studio开发人员显然做对了,但我还没弄明白。

2 个答案:

答案 0 :(得分:0)

在PropertyGrid本身上调用Focus。这将结束编辑模式并更新所选对象,但所选属性不会更改。

答案 1 :(得分:0)

您有两种不同的方法:

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

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

  3. 您的选择......

相关问题