gpt4 book ai didi

c# - Winform 自定义控件 : Why Setter not called when used from Constructor?

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:38 24 4
gpt4 key购买 nike

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

    [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 分钟),我无法重现您描述的行为。

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

  1. 创建了一个新的 Windows 窗体应用程序。
  2. 向我的项目添加了一个新的用户控件。
  3. 在设计 View 中打开新的用户控件并添加一个 TrackBar 控件(将 TrackBar 控件的属性全部设置为默认值)。
  4. 将以下代码添加到用户控件类(与您在上面发布的代码完全相同,只是添加了您在原始示例中省略的私有(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;
    }

  5. 构建项目。
  6. 在设计 View 中打开了使用新项目创建的默认窗体 (Form1)。
  7. 将我刚刚创建的用户控件 (UserControl1) 从自动放置的工具箱中拖到窗体的表面上。

slider 上的指示器一直显示到右侧(给定默认 Maximum 值 10 的正确和预期位置)。现在,你告诉我:我们在哪些方面有所不同?

关于c# - Winform 自定义控件 : Why Setter not called when used from Constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4347748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com