我有一个像这样的初始值属性:
[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,因此我的trackbar值不同步。
为什么?
只有在我更改对话框中的属性时才会调用setter。
答案 0 :(得分:2)
我决定按照其中一条评论中的建议采纳你的建议:
您可以自己尝试,需要2分钟。
所以我做了(花了大约3分钟),我无法重现你描述的行为。
以下是我遵循的确切步骤:
TrackBar
控件(将TrackBar
控件的属性设置为默认值)。在User Control类中添加了以下代码(与上面发布的完全相同,添加了原始示例中省略的私有字段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;
}
Form1
)。UserControl1
)拖出工具箱,将其自动放置在表单的表面上。滑块上的指示符一直显示在右侧侧(默认Maximum
值为10时的正确位置和预期位置)。现在,你告诉我:我们在做什么不同?
答案 1 :(得分:0)
尝试添加[Browsable(true)]
。
答案 2 :(得分:0)
你问题的关键部分在这里:
在表单上拖动自定义控件时
你仍然在设计师中,而设计师则为了渲染事物而作弊。实际运行应用程序时是否仍会发生这种情况?