Передача значений между тремя формами в C # .NET - PullRequest
0 голосов
/ 18 февраля 2011

У меня есть приложение для Windows, которое имеет три формы: Form1,2,3.

- Форма 1, имеет две кнопки, openform2, openform3. --Form2 имеет текстовое поле form2_textbox и кнопку form2_button --Form3 имеет текстовое поле form3_textbox

теперь, при нажатии кнопки openform2 в форме form1 открывается форма 2, в текстовое поле form2_textbox формы Form2 вводится строка, теперь при нажатии кнопки form2_button этой формы я хочу, чтобы Form1 получил это строковое значение и сохранил его строка receivefromform2, и затем отображает это строковое значение в form3_textbox Form3.

подскажите, пожалуйста, как выполнить эту задачу?

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

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

Например, при построении формы Form2 в форме Form1 добавьте обработчик событий для кнопки в форме Form2 (либо создав новое событие в форме Form2, либо выставив кнопку через свойство и прикрепив его напрямую). Обработчик события будет запрашивать у Form2 текст в текстовом поле и использовать его при создании Form3.

1 голос
/ 18 февраля 2011

Есть несколько способов сделать это.Использование событий .NET - это одно, но требует довольно связанной проводки.

Что я хотел бы предложить (и именно так я это делаю), так это использовать собственную шину (шаблон наблюдателя).Давайте назовем это MessageBus.Все ваши формы могут использовать один и тот же экземпляр этой шины, и когда происходит что-то интересное, вы можете опубликовать какое-нибудь Сообщение.Я бы держал его строго напечатанным, но для простоты скажем так:

public class Message<T> 
{ 
    public string Name { get; set; }
    public T Data { get; set; }
}

В вашем автобусе будут подписчики, которые будут отвечать на сообщения, которые их интересуют.

public class MessageBus
{
    public void Subscriber(ISubscriber subsriber)
    {
         // register your subscriber in some list
    }

    public void Publish(Message message)
    {
         // loop through subscribers and let them know
         // e.g. subscriber.Handle(message);
    }
}

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

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

Я полагаю, что существует более одного способа снятия шкуры с кошки.

У меня есть более зрелыйРеализация этого в моей композитной среде пользовательского интерфейса я использую для инструментов на нашей сервисной шине FOSS.Если вам интересно, вы можете посмотреть:

Шинный сервисный автобус на CodePlex

Если вы скачаете исходный код, вы найдете его в проекте Shuttle.Core.UI.

Надеюсь, это имеет смысл.

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