我有一个这样的初始值属性:
[Category("Main")]
[Description("Intial Value")]
[DefaultValue(10)]
public int InitialValue
{
get { return m_initialValue; }
set {
m_initialValue = value;
this.TrackBar.Value = this.m_initialValue;
}
}
所以在我的构造函数中我这样做了,例如:
this.InitialValue = 10;
令我惊讶的是,当在表单上拖动自定义控件时,未调用 setter,因此我的跟踪栏值未同步。
为什么?
只有当我在对话框中更改属性时,setter 才会被调用。
我决定采纳其中一条评论中的建议:
You can try by yourself will take 2 minutes.
所以我做了(大约花了 3 分钟),我无法重现您描述的行为。
以下是我遵循的确切步骤:
- 创建了一个新的 Windows 窗体应用程序。
- 向我的项目添加了一个新的用户控件。
- 在设计 View 中打开新的用户控件并添加一个
TrackBar
控件(将 TrackBar
控件的属性全部设置为默认值)。
将以下代码添加到用户控件类(与您在上面发布的代码完全相同,只是添加了您在原始示例中省略的私有(private)字段 m_initialValue
):
public class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
this.InitialValue = 10;
}
[Category("Main")]
[Description("Intial Value")]
[DefaultValue(10)]
public int InitialValue
{
get { return m_initialValue; }
set
{
m_initialValue = value;
this.trackBar1.Value = this.m_initialValue;
}
}
int m_initialValue;
}
- 构建项目。
- 在设计 View 中打开了使用新项目创建的默认窗体 (
Form1
)。
- 将我刚刚创建的用户控件 (
UserControl1
) 从自动放置的工具箱中拖到窗体的表面上。
slider 上的指示器一直显示到右侧(给定默认 Maximum
值 10 的正确和预期位置)。现在,你告诉我:我们在哪些方面有所不同?
我是一名优秀的程序员,十分优秀!