2014-12-01 3 views
1

У меня есть форма окна, и я хочу передать значение пользовательскому элементу управления. Я программно создаю пользовательский элемент управления в 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

Вы не используете конструктор 'test (string Id)'. Вы также никогда не используете переменную 'rowNum' в вызове DisplayImage. – LarsTech

+0

Это было оставлено от чего-то еще, что у меня есть в моем коде, который я удалил здесь – user3634308

ответ

2

Даже в WPF, где у вас есть привязки, пользовательский интерфейс автоматически не подберет изменение свойства (без повышения PropertyChanged). Это определенно не будет в жестко закодированной стране WinForms.

Так у вас есть две проблемы:

  1. Вы не вызывается конструктор по умолчанию в вызове, поэтому нет кода никогда устанавливает Text свойство текстового поля

  2. Даже если вы были установите текст, последующее изменение свойства не будет распространяться на пользовательский интерфейс.

Самым простым решением было бы просто запустить обновление пользовательского интерфейса в инкубаторе:

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

, если я хотел поставить UCtextBox.Text = usrID; ниже в коде, как я мог это сделать? – user3634308

+0

@ user3634308 Я не уверен, что вы имеете в виду. Вы можете поместить копию этой строки в любом месте. Вы просто нуждаетесь в этом в сеттере, чтобы изменить свойство, передаваемое в пользовательский интерфейс. – BradleyDotNET

+0

Мне нужно использовать usrID где-то дальше в коде, но он не работает. что-то вроде stream.login = usrID; Сначала я должен создать поток, а затем установить идентификатор пользователя. – user3634308

1

Вы должны поместить значение, переданное в USRID собственности в текстовое поле.

public partial class test : UserControl 
{ 
    public string usrID 
    { 
     get{return _usrId;} 
     set 
     { 
      _usrId = value; 
       UCtextBox.Text = value; 
     } 
    } 
Смежные вопросы