如何将值传递给用户控件?

时间:2014-12-01 17:10:53

标签: c# winforms user-controls

我有一个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;

        }


    }
}

显然,我不知道为什么这不起作用。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

即使在具有绑定的WPF中,UI也不会自动获取对属性的更改(不会引发PropertyChanged)。 肯定不会出现在WinForms的硬编码领域。

所以你有两个问题:

  1. 您在调用中调用了默认构造函数,因此没有代码设置文本框的Text属性

  2. 即使 设置了文本,对该属性的后续更改也不会传播到用户界面。

  3. 最简单的解决方案是在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;
        }
    }