我在处理基本表单的属性时遇到问题,无法以继承的形式维护状态。
环境:
- Visual Studio 2010 终极服务包 1:版本 10.0.40219.1 SP1Rel
- .Net框架:版本4.0.30319 SP1Rel
- Windows 7旗舰版
下面是源代码和重现步骤:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace Test
{
public partial class BaseForm : Form
{
[DefaultValueAttribute(true)]
public bool ControlVisible
{
get
{
return this.checkBox1.Visible;
}
set
{
this.checkBox1.Visible = value;
}
}
[DefaultValueAttribute(false)]
public bool ControlChecked
{
get
{
return this.checkBox1.Checked;
}
set
{
this.checkBox1.Checked = value;
}
}
public BaseForm()
{
InitializeComponent();
}
}
}
在上面,默认属性与 [DefaultValueAttribute] 匹配,即在 InitializeComponent() 中,checkBox1.Visible 设置为 true,checkBox1.Checked 设置为 false。这些是控件拖放到窗体上时的默认设置。
然后我创建了以下继承形式:
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
}
问题和重现步骤:
-
当我在设计器中打开 Form1 时,属性处于以下状态。
状态:ControlChecked = False - ControlVisible =True (bold)
控制可见被设定为True正如预期的那样,但是它是大胆的。 [DefaultValueAttribute] 设置为true在基本形式中,所以我预计该属性不会以粗体显示。
-
我现在改变控制可见 to False在设计师中。粗体关闭。
状态:ControlChecked = False - ControlVisible = False
-
我现在重建项目并重新生成 Form1 中的代码。这控制可见属性恢复到True以粗体显示。
状态:ControlChecked = False - ControlVisible =True (bold)
-
我现在改变控制检查 from False to True并且它如预期一样变得粗体。
状态:控制检查=True(粗体)-ControlVisible =True (bold)
-
我重建了项目,没有任何变化。
状态:控制检查=True(粗体)-ControlVisible =True (bold)
-
我现在改变的属性控制可见 from True to False并再次重建项目。控制可见翻转回True以粗体显示。
状态:控制检查=True(粗体)-ControlVisible =True (bold)
控制检查似乎按预期工作。控制可见不断翻回True当它设置为 false 并且粗体反转时。在我看来,不知怎的 [DefaultAttributeValue]true基本形式不被识别。
Update:进行修改以修复错误并更准确地隔离问题。
Update:如果我在 BaseForm 的构造函数中设置 checkBox1.Visible = false,那么一切都会按预期工作。因此,最重要的是,问题在于获取 DefaultValueAttributetrue在继承形式的自定义属性上被识别。
您的 ControlVisible 属性始终设置为 false:
[DefaultValueAttribute(true)]
public bool ControlVisible
{
get
{
return this.checkBox1.Visible;
}
set
{
this.checkBox1.Visible = false;
}
}
你的设置方法应该是:
this.checkBox1.Visible = value;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)