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

C# UserControl:在构造函数中使用自定义属性,c#,winforms,visual-studio-2017,C#,Winforms,Visual Studio 2017,我有这个问题: 我创建了一个自定义的UserControl,并添加了以下属性: public string TestString { get; set; } 没关系,在属性中我可以编辑它: 现在问题来了:我需要在usercontrol的构造函数中读取这个属性:为了简单地测试它,我有以下代码: public ucnTest() { InitializeComponent(); MessageBox.Show(TestString); } 当我跑步时,我得到了这个: 似乎在构

我有这个问题:

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

public string TestString { get; set; }
没关系,在属性中我可以编辑它:

现在问题来了:我需要在usercontrol的构造函数中读取这个属性:为了简单地测试它,我有以下代码:

public ucnTest()
{
    InitializeComponent();
    MessageBox.Show(TestString);
}
当我跑步时,我得到了这个:

似乎在构造函数中还没有传递值。。。我怎样才能解决这个问题

PS:如果我将消息放在加载事件中,它会工作:

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

为了了解发生了什么,我建议您研究表单构造函数(或添加UserControl的任何地方)的InitializeComponent()方法

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

如果确实需要访问构造函数中的值,则需要将其作为参数传递,如下所示:

public string TestString { get; set; }
public ucnTest(string myStringValue)
{
    InitializeComponent();
    TestString = myStringValue;
    MessageBox.Show(TestString);
}
然后您需要在InitializeComponent()方法中将
“YourString”
传递给构造函数

编辑:
将属性添加到代码

事件之前发生。部分加载的控件可能行为怪异,甚至崩溃。因此,从一开始就直接从构造函数中弹出消息框是一个非常糟糕的主意。

您自己已经说过了答案:在设计模式下为属性赋值只能在构造函数运行后进行赋值。只需将赋值放入构造函数中即可。谢谢。。为什么在一些旧的vs版本中,这工作得很好?改为在
Load
事件中测试属性值。在窗体的设计器中设置UserControl的属性时,仅在初始化UC后设置。所以,你不会发现它已经在它的构造函数中设置了,但是当它被加载时。谢谢@cmos,但是我如何才能将属性传递给构造函数?谢谢,但是我如何才能调用构造函数?我需要更改Designer.cs中
Designer.cs
下的代码。在Designer.cs中,应该有一行调用UserControl的基本构造函数。在这里你可以传递你的线。据我所知,如果您正在寻找,您将无法将其绑定到设计器中的属性。