VB.Net Winform单选按钮的属性上的所有属性都设置为ReadOnly=True



这是我在这里的第一个问题,请耐心等待。

我在我的软件中遇到了一个错误,一个给定控件中的多个单选按钮都可以同时选择,如图所示。请注意,这是一个非常大的程序。

在一个控制中选择多个单选按钮

在调试时,我发现这种行为的原因是RadioButton类的"Checked"属性上的ReadOnly属性设置为true。此外,似乎RadioButton上所有属性的ReadOnly属性都设置为True。我通过反射将ReadOnly属性的值改回false,确认了这是导致意外行为的原因。有趣的是,当这种情况发生时,我的应用程序中的每个单选按钮都会遇到同样的问题。

我能够追踪到属性在什么时候发生了变化。在另一种形式中,我在属性网格上显示一些对象,当我将该属性网格的SelectedObject设置为对象时,所有属性都会发生变化。带有属性网格的窗体和带有单选按钮的窗体在中都不常见。

一段时间以来,我一直无法找到这个问题的根源。如果有人对如何实现这一点有任何想法,可能会帮助我找出问题所在。

以下是调试窗口的图片,显示了在为属性网格设置SelectedObject属性之前和之后单选按钮上的ReadOnly属性值

之前

之后

谢谢。

编辑1:

这是设置属性网格的代码。第179行。调试时,有3个不同的子属性对象需要显示在不同的选项卡中。第一种不会引起任何问题。第二个是。

房地产网格代码

编辑2:

解决方案

感谢所有发表评论的人。事实上,在以下线程的帮助下,我能够找到问题的解决方案。

在PropertyGrid 中设置ReadOnly属性

基本上,在我的代码中有一个地方,我将对象中所有属性的ReadOnly状态设置为True。似乎有某种通用的"ReadOnly"属性在所有对象之间共享,如果它们没有特殊的定义的话。

我最初的解决方案是先检查ReadOnlyAttribute是否存在,然后再这样设置它的值

原始溶液

然而,对于像这样定义的属性,这返回True

非只读属性

但对于像这样的属性为False

只读属性

我再次猜测,有某种inherit属性被找到了。

因此,我的解决方案是使用以下函数进行检查。

最终解决方案

把这个检查放在我的SetReadOnly((函数中解决了我的问题。

解决方案

感谢所有发表评论的人。事实上,在以下线程的帮助下,我能够找到问题的解决方案。

在PropertyGrid 中设置ReadOnly属性

基本上,在我的代码中有一个地方,我将对象中所有属性的ReadOnly状态设置为True。似乎有某种通用的"ReadOnly"属性在所有对象之间共享,如果它们没有特殊的定义的话。

我最初的解决方案是先检查ReadOnlyAttribute是否存在,然后再这样设置它的值

原始溶液

然而,对于像这样定义的属性,这返回True

非只读属性

但对于像这样的属性为False

只读属性

我再次猜测,有某种inherit属性被找到了。

因此,我的解决方案是使用以下函数进行检查。

最终解决方案

把这个检查放在我的SetReadOnly((函数中解决了我的问题。

最新更新