C # с использованием элементов управления winform в другом классе - PullRequest
5 голосов
/ 09 ноября 2010

У меня есть приложение WinForm. В основной форме есть несколько элементов управления, таких как метки, текстовые поля и т. Д.

Если у меня есть другой класс в той же сборке, как я могу получить доступ к этим элементам управления?

Например, из моего нового класса я хочу обновить метку в Form1?

Ответы [ 5 ]

10 голосов
/ 09 ноября 2010

В свойстве метки (или любого элемента управления) установите для параметра «Модификаторы» значение «Публичный»

Теперь вы можете получить доступ к метке с объекта формы

 Form1 f = new Form1()
 f.lblMyLabel.Text = "My Text"
3 голосов
/ 09 ноября 2010

выберите элемент управления, к которому вы хотите получить доступ из другого класса / формы. перейдите к его свойству и установите для его значения модификаторов значение «internal» (если вы хотите использовать его только в той же сборке).

Теперь, когда бы вы ни хотели использовать его в одной сборке, просто создайте объект такой формы, как

myForm objform = new myForm();
objform.txtName.Text="any text";

тогда вы можете показать эту форму, используя objform.show (); или objform.showdialog ();

но я думаю, что это не решит вашу проблему, потому что я чувствую, что ваша форма уже отображается на экране, а из другой формы / класса вы хотите изменить значение метки / текстового поля так что для этого вам нужно будет взять текущий объект формы, иначе он не покажет никаких изменений в отображаемой в данный момент форме.

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

Существует множество других решений, например, путем создания открытого свойства, но вам нужно будет использовать ссылку на тот же объект отображаемой в данный момент формы, чтобы увидеть изменения, отражающие отображаемую в данный момент форму.

2 голосов
/ 09 ноября 2010

Один из способов - создать открытые свойства в вашем классе Form1, которые будут предоставлять элементы управления, которые вы пытаетесь изменить

Например, если ваша метка называется label1 в конструкторе, вы можете сделать что-то вроде этого:

public Label MyForm1Label { get { return label1; } }
1 голос
/ 09 ноября 2010

Помимо уже упомянутых решений, вы можете создать в своей форме какой-нибудь открытый метод, который обеспечит желаемую функциональность (может быть хорошо, если некоторые изменения должны отображаться в нескольких элементах управления - другие ваши классы не должны помнить, какиеодин, чтобы изменить)

public void SetSomething(int value)
{
   Control1.value = value;
   Control2.value = value;
   ...
}
0 голосов
/ 24 июля 2018

Самый простой способ - использовать:

Form1 f = new Form1 () f.lblMyLabel.Text = "My Text"

Следовательно, вы должны установить метку Form1 "lblMyLabel"просто для публики.Я сделал это с помощью richTextBox.

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...