我正在开发一个项目,我在其中使用属性网格来显示所选控件的属性。
属性网格固定在容器的左边缘,在剩余的空间中我有我正在设计的形式。
单击表单上的控件后,特定控件的属性将被选中。
在上图中,我选择了文本框,文本框的属性显示在propertygrid上。
如果你观察到,默认情况下,Name属性也会突出显示。 有没有办法以编程方式取消选择此属性?
我在网上尝试了一些建议,但没有一个有帮助。我无法找到从PropertyGrid中删除所有选择的方法,但它的行为似乎与DataGrid不同...
这就是我需要这个的原因...... 在选择控件时,如果选择了属性网格中的属性,则会对属性进行修改。
例如,如果我使用Ctrl + X剪切控件,属性网格中的选定值将被删除,这在某些情况下会强制用户在修改表单上的任何内容之前设置属性。
我尝试过选择多个控件,但在这种情况下,所选属性似乎是持久的
答案 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 来(显示和)激活属性窗格。
如果您无法使其正常工作,那么最好的妥协方案是为属性网格使用另一个窗口。通过为属性使用不同的工具窗口,当主窗口具有焦点时,它不应响应键盘。
以下是一些可能对您有帮助的链接:
Control.Focus Method() - 请参阅备注部分。
在任何情况下,当属性网格具有焦点并选择属性时,您不应阻止Ctrl + X按预期工作。用户不喜欢不遵循UI约定的软件。
作为软件开发人员,您应尽可能确保应用程序遵循标准行为。我建议你额外花一两天时间开发软件,而不是做黑客。
通常情况下,获得几天的妥协永远不会得到解决,并且多年来一直是痛苦的。最好从一开始就做好。 取消选择属性网格中的项目是不可接受的解决方法。您的经理不应允许您这样做。