如何将值传递给用户控件

本文关键字:给用户 控件 值传 | 更新日期: 2023-09-27 18:32:44

我有一个窗口窗体,我想向用户控件传递一个值。 我以编程方式在 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。名称,然后我只想在用户控件上的文本框中显示它。 下面是用户控件的代码:

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;
        }

    }
}

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

如何将值传递给用户控件

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

所以你有两个问题:

  1. 您在调用中调用了默认构造函数,因此任何代码都不会设置文本框Text 属性

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

最简单的解决方案是在资源库中运行 UI 更新:

private string usrID;
public string UserID //Correct style!
{
   get { return usrID; }
   set
   {
      usrID = value;
      RCtextBox.Text = usrID;
   }
}

您还可以从 setter 调用方法,监听INotifyPropertyChanged和许多其他事情。

另一种方法是公开方法而不是属性:

public string UpdateUserID(string newId)
{
    usrID = newId;
    RCtextBox.Text = usrID;
}

你应该把传递给usrId属性的值放到文本框中。

    public partial class test : UserControl
{
    public string usrID 
    { 
        get{return _usrId;} 
        set
        {
            _usrId = value;
              UCtextBox.Text = value;
        }
    }