我希望能够在我的 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。 这怎么可能?
谢谢你吉米。这就是我需要的答案。现在可以用了!
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。感谢您的帮助。