2014-12-01 95 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; 
     } 
    }