首页 > 解决方案 > VB.Net Winform Radiobutton 的所有属性都设置为 ReadOnly = True

问题描述

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

我在我的软件中遇到了一个错误,其中给定控件中的多个单选按钮都能够同时被选中,如此处所示。请注意,这是一个非常大的程序。

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

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

我能够追踪属性更改的时间点。在另一种形式中,我在属性网格上显示一些对象,当我将该属性网格的 SelectedObject 设置为所有属性都更改时的对象时。带有属性网格的表单和带有单选按钮的表单无论如何都不常见。

一段时间以来,我一直无法找到这个问题的根源。如果有人对这如何可能有任何想法,它可能能够帮助我找出问题在我的程序中的位置。

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

就在之前

刚过

谢谢你。

编辑1:

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

属性网格代码

编辑2:

解决方案

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

在 PropertyGrid 中设置 ReadOnly 属性

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

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

原始解决方案

但是,对于像这样定义的属性,这将返回 True

非只读属性

但是对于这样的属性是 False

只读属性

我再次猜测是找到了某种继承属性。

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

最终解决方案

将此检查放入我的 SetReadOnly() 函数中解决了我的问题。

标签: c#vb.netwinformsradio-button

解决方案


解决方案

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

在 PropertyGrid 中设置 ReadOnly 属性

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

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

原始解决方案

但是,对于像这样定义的属性,这将返回 True

非只读属性

但是对于这样的属性是 False

只读属性

我再次猜测是找到了某种继承属性。

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

最终解决方案

将此检查放入我的 SetReadOnly() 函数中解决了我的问题。


推荐阅读