2016-12-21 19 views
0

我正在使用属性网格来显示所选控件的属性的项目。C#Winform - 在propertygrid中有一种方法可以以编程方式取消选择所有网格元素?

enter image description here

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

单击窗体上的控件时,特定控件的属性被选中。

enter image description here

在上图中,我选择了文本框和文本框的属性得到显示在PropertyGrid中。

这里如果您注意到,默认情况下Name属性也会突出显示。 是否有某种方式通过编程取消选择此属性?

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

这是为什么我需要这个... 上选择控制,如果选择了属性网格中的属性,则该属性将被修改。

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

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

+0

问题的标题和你描述的部分'*这是为什么我需要这个*'是两个不同的东西。那究竟是什么问题? –

+0

hi @RezaAghaei。我想要一些像propertyGrid1.UnSelectProperties()这样的函数,我可以从我的程序中调用以删除PropertyGrid上的所有活动选择 –

+0

在图2中,当我单击控件时,名称属性被选中。即使当我选择多个控件时,这仍将保持选中状态。我想要一种方法来取消选择名称属性 –

回答

1

由于PropertyGrid使用DefaultProperty在网格中选择属性,作为一个选项可以设置DefaultProperty属性在例如:

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

嗨@Reza Aghaei,我也想知道我是否应该在窗体上这个非浏览的属性添加到每个用户控件,或者,如果有一些办法的事情联系起来到表单中的所有控件。 –

+2

喜@codefrenzy你并不需要一个新的属性添加到控件。所有控件都具有不可浏览的“Site”属性。 –

+0

喜@Reza Aghaei,我想在我的PropertyGrid中获取与控制机构的容器形式直接设置它,它不是为我工作。让我检查我可以修改的地方。 –

0

那么,你正在尝试的是黑客行为。如果您不是使用该软件的唯一人员,那么执行此类黑客绝不是一个好主意,尤其是

在你的情况下,重点应该在设计师,而你与它进行交互。因此,如果用户按Ctrl + X,设计师应该响应键盘,它不应该对属性网格产生任何影响(因为只有一个控件可以同时具有焦点)。

因此,您应确保设计师的注意力集中,最初显示时注重焦点,并在按TAB键时获得焦点。再次按TAB键应将焦点放在属性网格上,以便用户可以在不使用键盘的情况下与网格进行交互。

如果你有超过这2个控件,那么TAB显然应该停止在任何适当的控件上。另外,可以使用一些直接快捷方式(如F4)来(显示和)激活属性窗格。

如果你无法做到这一点,那么最好的折衷办法是使用另一个窗口的属性网格。通过对属性使用不同的工具窗口,当主窗口具有焦点时,它不应该响应键盘。

这里有一些链接,可以帮助你:

Panel not getting focus

Control.Focus Method() - 见备注一节。

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

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

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

相关问题