属性窗口中定义的属性值在 OnLoad 和我的 UserControl 的构造函数中仍然有默认值

问题描述 投票:0回答:1

我希望能够在我的 UserControl 中使用在 Visual Studio 属性窗口中设置的属性,但我得到了属性的默认值,例如 0 或 null。 我在 C# 中的 UserControl 的构造函数和 Onload 中尝试过此操作。

SGscrollBoxSyncFusionThumbnailsBase 基于 UserControl
我试过这个:

public abstract class SGscrollBoxSyncFusionThumbnailsBase : SGscrollBoxSyncFusion
{
    protected SGscrollBoxSyncFusionThumbnailsBase()
    {
        MessageBox.Show(Size.ToString());
    }

还有这个

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    MessageBox.Show(Size.ToString());
}

但这都返回 (Width=0, Height =0) 并且应该是 (Width=252, Height =126)

当我在表单中尝试此操作时:

private void Form1_Load(object sender, EventArgs e)
{
    MessageBox.Show(sgScrollBoxSyncFusionThumbnailsPhotoRoll.Size.ToString());            
}

返回(宽度=252,高度=126),这就是我想要的。

如何使用用户控件内的代码获得预期结果?
我将 C# 与 WinForms 一起使用。

编辑:您可以将这些类视为常规的用户控件。 SyncFusion 意味着控件上有 SyncFusion 滚动条。

SGscrollBoxSyncFusion 是一个基于 UserControl 的自定义控件。 派生类是抽象的 SGscrollBoxSyncFusionThumbnailsBase。 sgScrollBoxSyncFusionThumbnailsPhotoRoll 类派生自此类,并具有公共构造函数。

这是类定义:

public class SGscrollBoxSyncFusionThumbnailsPhotoRoll : SGscrollBoxSyncFusionThumbnailsBase 

这是构造函数:

public SGscrollBoxSyncFusionThumbnailsPhotoRoll() 
{ ...... }

编辑2: 为了简化我的问题,我从头开始创建了一个 UserControl 类。

namespace UserControls
{
    public partial class UserControl1 : UserControl
    {
        public int Number { get; set; }
        public UserControl1()
        {
            InitializeComponent();
            MessageBox.Show(Number.ToString());
        }
    }
}

我将此控件放置在窗体上,并将窗体设计器的属性窗口中的 Number 属性设置为 100。结果仍然是 0。 这怎么可能?

c# winforms constructor properties onload
1个回答
0
投票

谢谢你吉米。这就是我需要的答案。现在可以用了!

protected override void OnHandleCreated(EventArgs e)
{
    base.OnHandleCreated(e);
    MessageBox.Show(Number.ToString()); //Gives 100 and that is correct
}

在我的问题中,我使用了 OnLoad,但当 OnLoad 调用晚于 OnhandleCreated 时,它不起作用。我猜的原因是 de Size 在基类中设置为 0。感谢您的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.