UserControl:在构造函数中使用自定义属性

时间:2019-02-25 13:34:49

标签: c# winforms visual-studio-2017

我遇到了这个问题:

我创建了一个自定义UserControl,并添加了以下属性:

public string TestString { get; set; }

没关系,在“属性”中,我可以对其进行编辑:

enter image description here

现在是问题所在:我需要在用户控件的构造函数中读取此属性:要简单地对此进行测试,我有以下代码:

public ucnTest()
{
    InitializeComponent();
    MessageBox.Show(TestString);
}

当我跑步时,我得到了:

enter image description here

似乎在构造函数期间值尚未传递...我该如何解决?

PS:如果将消息放入加载事件中,它将起作用:

private void ucnTest_Load(object sender, EventArgs e)
{
    MessageBox.Show(TestString);
}

2 个答案:

答案 0 :(得分:1)

WPF / UWP的经验法则:所有视觉活动都应在Loaded事件之前进行。部分加载的控件可能行为异常,甚至崩溃。因此,从一开始就直接从构造函数中弹出消息框确实是个坏主意。

答案 1 :(得分:0)

要了解发生了什么情况,建议您研究一下窗体构造函数的InitializeComponent()方法(或添加UserControl的位置)。

您应该看到,在您将设计器中分配的值传递给控件之前,已调用UserControl的构造函数。

如果您确实需要访问构造函数中的值,则需要像这样将其作为参数传递:

public string TestString { get; set; }
public ucnTest(string myStringValue)
{
    InitializeComponent();
    TestString = myStringValue;
    MessageBox.Show(TestString);
}

,然后您需要在InitializeComponent()方法中将"YourString"传递给构造函数。

编辑: 将属性添加到代码中