Winform自定义控件:为什么在从构造函数中使用时不调用Setter?

时间:2010-12-03 16:40:46

标签: c# winforms

我有一个像这样的初始值属性:

    [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。

3 个答案:

答案 0 :(得分:2)

我决定按照其中一条评论中的建议采纳你的建议:

  

您可以自己尝试,需要2分钟。

所以我做了(花了大约3分钟),我无法重现你描述的行为。

以下是我遵循的确切步骤:

  1. 创建了一个新的Windows窗体应用程序。
  2. 为我的项目添加了新的用户控件。
  3. 在设计视图中打开了新的用户控件,并添加了TrackBar控件(将TrackBar控件的属性设置为默认值)。
  4. 在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;
    }
    

  5. 建立项目。
  6. 打开在设计视图中使用新项目创建的默认表单(Form1)。
  7. 将我刚刚创建的用户控件(UserControl1)拖出工具箱,将其自动放置在表单的表面上。
  8. 滑块上的指示符一直显示在右侧侧(默认Maximum值为10时的正确位置和预期位置)。现在,你告诉我:我们在做什么不同?

答案 1 :(得分:0)

尝试添加[Browsable(true)]

答案 2 :(得分:0)

你问题的关键部分在这里:

  

在表单上拖动自定义控件时

你仍然在设计师中,而设计师则为了渲染事物而作弊。实际运行应用程序时是否仍会发生这种情况?