我有一个Windows窗体,我想将值传递给用户控件。我以编程方式在winform中创建用户控件并设置一个值,但它没有设置。这是我创建用户控件的代码:
namespace AddPanel
{
public partial class Form1 : Form
{
public Form1()
{
int a = db.CamTable1s.Count();
InitializeComponent();
DisplayImage(a);
}
private void DisplayImage(int rowNum)
{
test nt = new test();
nt.Location = new System.Drawing.Point(33, h);
nt.Name = "test1";
nt.usrID = "username";
nt.Size = new System.Drawing.Size(408, 266);
this.Controls.Add(nt);
}
}
}
我在测试用户控件中设置了一个名为nt.Name的变量,然后我只想在用户控件的文本框中显示它。以下是用户控件的代码:
namespace AddPanel
{
public partial class test : UserControl
{
public string usrID { get; set; }
public test()
{
InitializeComponent();
//textBox1.Text = usrID;
}
public test(string Id)
{
InitializeComponent();
usrID = Id;
UCtextBox.Text = usrID;
}
}
}
显然,我不知道为什么这不起作用。有人可以帮助我吗?
答案 0 :(得分:2)
即使在具有绑定的WPF中,UI也不会自动获取对属性的更改(不会引发PropertyChanged
)。 肯定不会出现在WinForms的硬编码领域。
所以你有两个问题:
您在调用中调用了默认构造函数,因此没有代码曾设置文本框的Text
属性
即使 设置了文本,对该属性的后续更改也不会传播到用户界面。
最简单的解决方案是在setter中运行UI更新:
private string usrID;
public string UserID //Correct style!
{
get { return usrID; }
set
{
usrID = value;
RCtextBox.Text = usrID;
}
}
您也可以从设置器中调用方法,聆听INotifyPropertyChanged
以及其他一些事情。
另一种方法是公开方法而不是属性:
public string UpdateUserID(string newId)
{
usrID = newId;
RCtextBox.Text = usrID;
}
答案 1 :(得分:2)
您应该将传递给usrId属性的值放到文本框中。
public partial class test : UserControl
{
public string usrID
{
get{return _usrId;}
set
{
_usrId = value;
UCtextBox.Text = value;
}
}