2010-08-23 4 views
0

У меня есть приложение winforms.Обмен переменной между двумя winforms

У меня есть текстовое поле в одной форме (звонок F1), и когда на эту кнопку нажата кнопка (вызов F2), она запускает другую форму.

На F2 я хочу установить строку через текстовое поле (и сохранить его в переменной в классе), а затем, когда я закрою эту форму, строка появится в метке в F1.

Таким образом, я в основном разделяю переменные между обеими формами. Однако я не могу заставить это работать правильно. Как выглядит этот код?

ответ

4

Я хотел бы добавить новое свойство form2. Скажите, что это номер телефона. Затем я добавлю свойство friend m_phone() как строку в форму 2. После отображения экземпляра формы2, но до его закрытия вы можете ссылаться на свойство m_phone в коде form1.

Это дополнительный уровень косвенности от решения Мэтью Эбботта. Он не предоставляет элементы управления 2 формы для form1.

EDIT

.: например

public string StoredText 
{ 
    get; 
    private set; 
} 

внутри набора вы можете обратиться к вашему управления пользовательского интерфейса, как обратный TextBox1.Text. Используйте get, чтобы установить значение текстового поля из более ранней загрузки.

И:

public string GetSomeValue() 
{ 
    var form = new F2(); 
    form.ShowDialog(); 

    return form.StoredText; 
} 

Просто убедитесь, что StoredText заполняется (или нет, если это необходимо) до того, как форма была закрыта.

+0

Полностью согласен, я должен был знать, что вы должны действительно предоставлять свойства для доступа к значениям, а не для отображения полей пользовательского интерфейса. Я отредактировал ваш ответ и +1 для свойства. –

+0

просто любопытно, почему публичный друг? Я бы не подумал, что это свойство нужно будет читать за пределами .sln – Beth

+0

В моем конкретном случае это не обязательно. Во всяком случае, это сработало хорошо. – dotnetdev

3

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

public string GetSomeValue() 
{ 
    var form = new F2(); 
    form.ShowDialog(); 

    return form.TextBox1.Text; 
} 

И называется в коде:

Label1.Text = GetSomeValue(); 
+0

Это работает! Благодарю. – dotnetdev

0

Это может быть не самый эффективный способ приближения, но вы можете создать класс под названием DB (database). Внутри этого класса, создавать переменные, как

public static bool test или public static bool[] test = new bool[5];

В ваших других формах, вы можете просто создать экземпляр. DB db = new DB(); затем захватите информацию, используя db.test = true/false. Это то, что я делал, и он отлично работает.

Извините, я только как год опоздал.