2014-12-01 97 views
1

我有一个窗体窗体,我想传递一个值给用户控件。我以编程方式在winform中创建用户控件并设置一个值,但它没有设置。这里是我创建的用户控件的代码:我把我叫做nt.Name测试用户控制做出了可变如何将值传递给用户控件?

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

     } 


    } 
} 

,然后我只是想在用户控件上的文本框来显示它。这里是用户控制的代码:

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

您没有使用构造函数'test(string Id)'。您也不会在DisplayImage调用中使用变量'rowNum'。 – LarsTech 2014-12-01 17:18:12

+0

如果我想把UCtextBox.Text = usrID;如果我在我的代码中删除了 – user3634308 2014-12-01 17:32:32

回答

2

即使在WPF中,如果您有绑定,UI将不会自动获取对属性的更改(不会提升PropertyChanged)。它肯定不会在WinForms的硬编码的土地。

所以,你有两个问题:

  1. 你调用调用默认的构造函数,所以没有代码曾经设置文本框

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

最简单的办法是只运行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; 
} 
+0

,那么剩下的就是其他东西了。在代码中更进一步,我怎么能这样做? – user3634308 2014-12-01 19:25:39

+0

@ user3634308我不确定你的意思。你可以在任何你想要的地方放一份该行的副本。您只需在setter中使用它,以便将属性更改传播到UI。 – BradleyDotNET 2014-12-01 19:26:54

+0

我需要在代码中更深的地方使用usrID,但它不起作用。像stream.login = usrID;我必须先创建流,然后设置用户ID。 – user3634308 2014-12-01 19:36:33

1

你应该把传入usrId属性设置为文本框的值。

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