2009-02-10 7 views
0

У меня есть 2 формы в моем проекте, form1 и form2. Когда я нажимаю на кнопку в Form1 я запускаю этот код:Доступ к элементам управления в новой форме

Form tempform = new Form2(); 
tempform.Show(); 

В моем коде для Form2 У меня есть ярлык, который я теперь нужно изменить текст. Как я могу получить доступ к ярлыку?

Я пробовал:

tempform.label1.value = "new text" 

И это не сработало, я даже пытался получить доступ с помощью коллекции Controls, но я думаю, что я испортил, что до. Есть ли способ получить доступ к ярлыку? ИЛИ есть ли способ передать значение этой новой форме, а затем изменить форму этого текста.

Благодаря

ответ

7

Если значение метки должен быть установлен только один раз, когда создается форма, а затем использовать конструктор Form2 так:

public Form2(string labelValue) 
{ 
    _labelValue = labelValue; 
} 

, а затем вызвать этот конструктор при создании формы.

В качестве альтернативы, если изменения этикетки в течение всего срока службы формы, сделать общественную собственность:

public string LabelValue 
{ 
    get { return label1.Text; } 
    set { label1.Text = value; } 
} 

Кроме того, я рекомендовал бы называть параметры и/или свойства, чтобы отразить смысл значения, например, «titleText» вместо «labelValue». Таким образом Form2 может решить, как он хочет отображать информацию (в строке заголовка, ярлыке, текстовом поле и т. Д.), И Form1 не должен беспокоиться об этом.

Edit: Потребляйте свойство LabelValue так:

Form2 newForm = new Form2(); // Assign object to a Form2 instead of Form 
newForm.LabelValue = "new text"; 
newForm.Show(); 
+0

Я попытался это сделать, и это то, что я получаю: Ошибка «System.Windows.Forms.Form» не содержит определения для «LabelValue» и не существует метода расширения «LabelValue», принимающего первый аргумент типа «System.Windows.Forms.Form». – AntonioCS

+0

Вы ссылаетесь на свой объект Form2 как на форму. Тип формы не будет определять новые методы. Вы должны создать переменную Form2. Я добавил пример моего ответа. – Misko

+0

Если вы назначаете значение поля через аргумент конструктора Form2, вы можете сохранить свою новую форму как ссылку на форму. –

2

управления имеют protected доступ по умолчанию. Вы можете изменить это на public, или вы можете добавить метод/свойство в класс form2 для установки метки и вызова (последний метод обычно предпочитает сохранять инкапсуляцию и потому, что разработчик может захотеть перезаписать общедоступные изменения.).

+0

Я добавил этот метод: общественности недействительным SetLabelValue (строка доблести) { Label1.Text = доблесть; } И получил эту ошибку: «System.Windows.Forms.Form» не содержит определение для «SetLabelValue» и нет методы расширения – AntonioCS

+0

Убедитесь, что вы добавили функцию в нужной форме, называют его в правом путь, и что form2 был скомпилирован перед использованием в form1 –

Смежные вопросы