Отправка информации между двумя Windows Froms в C # - PullRequest
1 голос
/ 09 февраля 2010

Это может быть вопрос новичка. :). Рассмотрим следующий сценарий.

  • Предположим, у нас есть две уже загруженные формы окон (т. Е. Вы
    ). можно увидеть обе формы)
  • Форма 1 содержит текстовое поле и кнопку «Отправить», а форма 2 содержит текстовую метку.
  • Пользователь может ввести строку в текстовое поле и нажать отправить на Форма 1 Этикетка на форме 2 должна обновиться новым текстом.

Каков наилучший способ добиться этого? Есть формальный способ сделать это? Я не хочу увеличивать области видимости переменных без необходимости.

Редактировать: обе формы принадлежат одному приложению

Ответы [ 3 ]

3 голосов
/ 09 февраля 2010

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

1 голос
/ 09 февраля 2010

Проведите небольшое исследование по шаблону контроллера представления модели и привязке данных в winforms.

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

0 голосов
/ 09 февраля 2010

Form1 запускает Form2 для открытия. Form2 имеет перегруженный конструктор, который принимает вызывающую форму в качестве аргумента и предоставляет ссылку на члены Form2. Это решает проблему связи. Например, я выставил Свойство Label как общедоступное в Form1, которое изменено в Form2.

При таком подходе вы можете общаться по-разному.

Ссылка для скачивания для примера проекта

// Ваша форма1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }

    public string LabelText
    {
        get { return Lbl.Text; }
        set { Lbl.Text = value; }
    }
}

// Ваша форма2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private Form1 mainForm = null;
    public Form2(Form callingForm)
    {
        mainForm = callingForm as Form1; 
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.mainForm.LabelText = txtMessage.Text;
    }
}

альтернативный текст http://ruchitsurati.net/files/frm1.png

альтернативный текст http://ruchitsurati.net/files/frm2.png

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