在属性网格中有没有办法以编程方式取消选择所有网格元素?

时间:2016-12-21 11:29:38

标签: c# winforms propertygrid

我正在开发一个项目,我在其中使用属性网格来显示所选控件的属性。

enter image description here

属性网格固定在容器的左边缘,在剩余的空间中我有我正在设计的形式。

单击表单上的控件后,特定控件的属性将被选中。

enter image description here

在上图中,我选择了文本框,文本框的属性显示在propertygrid上。

如果你观察到,默认情况下,Name属性也会突出显示。 有没有办法以编程方式取消选择此属性?

我在网上尝试了一些建议,但没有一个有帮助。我无法找到从PropertyGrid中删除所有选择的方法,但它的行为似乎与DataGrid不同...

这就是我需要这个的原因...... 在选择控件时,如果选择了属性网格中的属性,则会对属性进行修改。

例如,如果我使用Ctrl + X剪切控件,属性网格中的选定值将被删除,这在某些情况下会强制用户在修改表单上的任何内容之前设置属性。

我尝试过选择多个控件,但在这种情况下,所选属性似乎是持久的

2 个答案:

答案 0 :(得分:1)

由于PropertyGrid使用DefaultProperty在其网格中选择属性,作为选项,您可以在运行时为对象设置DefaultProperty属性不可浏览的属性,例如:

this.propertyGrid1.SelectedObject = null;
TypeDescriptor.AddAttributes(someControl,
    new Attribute[] { new DefaultPropertyAttribute("Site") });
this.propertyGrid1.SelectedObject = someControl;

答案 1 :(得分:0)

嗯,你正在尝试的是黑客攻击。如果您不是唯一使用该软件的人,那么进行此类黑客攻击绝不是一个好主意。

在您的情况下,当您与其进行互动时,焦点应放在设计师上。因此,如果用户按 Ctrl + X ,设计人员应该响应键盘,它不会对属性网格产生任何影响(因为只有一个控件可以同时具有焦点)。 / p>

因此,您可以确保您的设计师可以聚焦,在初始显示时具有焦点,在您按TAB键时获得焦点。再次按TAB键应将焦点放在属性网格上,以便用户可以在不使用键盘的情况下与网格交互。

如果你有超过这两个控件,那么显然TAB也应停在任何适当的控件上。此外,最好有一些直接的快捷方式,如 F4 来(显示和)激活属性窗格。

如果您无法使其正常工作,那么最好的妥协方案是为属性网格使用另一个窗口。通过为属性使用不同的工具窗口,当主窗口具有焦点时,它不应响应键盘。

以下是一些可能对您有帮助的链接:

Panel not getting focus

Control.Focus Method() - 请参阅备注部分。

在任何情况下,当属性网格具有焦点并选择属性时,您不应阻止Ctrl + X按预期工作。用户不喜欢不遵循UI约定的软件。

作为软件开发人员,您应尽可能确保应用程序遵循标准行为。我建议你额外花一两天时间开发软件,而不是做黑客。

通常情况下,获得几天的妥协永远不会得到解决,并且多年来一直是痛苦的。最好从一开始就做好。 取消选择属性网格中的项目是不可接受的解决方法。您的经理不应允许您这样做。