Rabee Qabaha Ответов: 2

Передача значений из пользовательских элементов управления на форме


У меня есть небольшая проблема, у меня есть Usercontrol1 и Form2 то, что я хочу, это передать значение textbox1 из usercontrol1 в textbox1 в Form2. (у меня есть много значений для передачи)

Что я уже пробовал:

текстовое поле textbox1.Текст = Файл Usercontrol1.текстовое поле textbox1.текст

[no name]

Хорошо... поскольку вы, по-видимому, создаете совершенно новый, никогда ранее не виданный пользовательский элемент управления, как бы вы ожидали получить значение из пустого текстового поля?

Rabee Qabaha

Я не знаю, этот код просто для того, чтобы передать пост-вопрос.
есть ли решение моего вопроса ??

Ralf Meier

Решение вашего вопроса дает OriginalGrif - в интернете можно найти множество примеров, где вы могли бы увидеть, как решить эту "проблему". На самом деле свойства предназначены именно для этого. Все элементы управления, которые используются внутри UserControl, должны принадлежать только UserControl (установлен в Private).

Если у вас есть конкретный вопрос, не стесняйтесь задавать его, и я уверен, что вы получите хороший ответ ...

[no name]

Да, есть, напишите какой-нибудь реальный код. Код, который Вы нам сейчас дали и который демонстрирует вашу проблему, даже не будет компилироваться.

[no name]

Формы Form2.Текстовое поле textbox1.Текст = Меня.Текстовое поле textbox1.Текст

Ralf Meier

Вы действительно уверены, что имеете в виду то, что написали ?..

[no name]

даже если это не лучшая практика, она работает

2 Ответов

Рейтинг:
0

OriginalGriff

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

Таким образом, элемент управления не "привязан" к одной форме и может быть повторно использован по мере необходимости - что является хорошим дизайном Упс.


Rabee Qabaha

Я сделал это, но я не мог вызвать значение из свойства :(
я покажу вам код в этом сомневаются.

OriginalGriff

Вам придется ... "я не мог назвать стоимость от собственности" ничего не значит само по себе!

Rabee Qabaha

Я решил эту проблему с помощью приведенного ниже кода, правильно ли это сделать ??

OriginalGriff

Нет. Ни в коем случае.
Здесь есть три проблемы.
Во - первых, код требует, чтобы форма предоставляла свой компонент пользовательского интерфейса (текстовое поле) всему миру-он должен быть общедоступным. Это означает, что форма не может вносить никаких изменений без учета влияния, которое может оказать на внешний мир. Например, если вы решите через несколько месяцев изменить текстовое поле для NumericUpDown, вы сломаете весь существующий код, который его использует. Это плохо , очень плохо. Никогда не открывайте элементы пользовательского интерфейса внешнему миру, именно поэтому они объявляются закрытыми для начала!

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

В-третьих, это не делает того, что вы описываете, - он создает новый экземпляр формы вместо доступа к данным в исходном контейнере. Это плохо, потому что это означает, что каждый раз, когда вы нажимаете кнопку, Вы получаете еще один экземпляр формы! Попробуйте: нажмите кнопку пять раз, а затем закройте форму. Понимаете, что я имею в виду?

Rabee Qabaha

спасибо за повтор, тогда что я могу сделать ??
не могли бы вы помочь ?

OriginalGriff

Прочтите то, что я сказал изначально. Он говорит вам, что делать.
Взгляните на это:
http://www.codeproject.com/Tips/548131/Transferring-information-between-two-forms-Part
Он написан на C#, а не на VB, но показывает, что нужно делать.

Рейтинг:
0

Rabee Qabaha

Спасибо за все на самом деле, вот как я это сделал :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim frm As New SbillPrint
        frm.smoney_txt.Text = moneys_txt.Text
        frm.ShowDialog()
End Sub