Как я могу передать значения из одной формы в другую? - PullRequest
4 голосов
/ 04 мая 2009

Рассмотрим ситуацию, когда у меня есть две формы окна, скажем F1 и F2. После использования F1 я позвонил F2.ShowDialog(). Это также ставит F2 на экран. Теперь, когда обе формы видимы, как я могу передать данные из F1 в F2? Кроме того, как только F2 (модальное диалоговое окно) завершается, как я могу вернуть данные в F1?

Ответы [ 10 ]

3 голосов
/ 17 июня 2010

Кто-нибудь рассматривал просто передачу значения в форму в атрибуте тега.

Form newForm = new form();
newForm.Tag = passValue;
newform.showmodal();

когда отображается newform, программа загрузки (или любая другая) может использовать данные в теге

public void load()
{
  if (this.Tag.length > 0)
  {
     // do something with the data
  }
}
2 голосов
/ 04 мая 2009
int x=10;
Form1 f2 = new Form1(x);
f2.ShowDialog();

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

и так будет

public Form2(int x)
  {
        InitializeComponent();
        this.x = x;
 }

и будет замечено в первой форме, когда вы создаете экземпляр из формы 2, у вас есть два варианта, один из которых позволит вам передать значение

2 голосов
/ 04 мая 2009

Добавьте этот код в соответствующем месте в вашем от f1.

Form f2 = new Form();
f2.ShowDialog();

НТН

1 голос
/ 04 мая 2009

Допустим, у вас есть элемент управления TextBox в Form1, и вы хотите передать значение из него в Form2 и показать Form2 модально.

В форме 1:

private void ShowForm2()
{
    string value = TheTextBox.Text;
    Form2 newForm = new Form2();
    newForm.TheValue = value;
    newForm.ShowDialog();
}

В форме 2:

private string _theValue;
public string TheValue 
{ 
    get
    {
        return _theValue;
    }
    set
    {
        _theValue = value; 
        // do something with _theValue so that it
        // appears in the UI

    }
}

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

  1. Создать экземпляр формы для шоу
  2. Перенос данных в эту новую форму экземпляр
  3. Показать форму

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

[edit: расширенные методы свойств в Form2 для большей ясности]

0 голосов
/ 21 июля 2012

Может быть, я опоздал. но все те, кто может хотеть.

В форме назначения есть конструктор, определенный следующим образом

public partial class Destination: Form
{
    string valueAccepted;
    public Destination(string _valuePassed)
    {
        InitializeComponent();
        this.valueAccepted= _valuePassed;
    }
}

и в исходной форме вызовите форму, подобную этой

        Source sourceForm= new Source ("value Passed");
        sourceForm.ShowDialog();

таким образом «значение прошло» передается из источника формы в место назначения формы

0 голосов
/ 04 мая 2009

Существует несколько способов передачи данных между двумя формами. проверьте эти ссылки, на которых есть примеры видео, чтобы сделать это

-FormToForm Использование свойств - http://windowsclient.net/learn/video.aspx?v=108089

0 голосов
/ 04 мая 2009

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

struct myData
{
    String str1;
    String str2;
}

Public Class Form1
{
  Public myData dat;
}

(Примечание: тип не должен быть публичным, это только для примера) Таким образом, данные находятся в Form1. Измените конструктор Form2 так, чтобы он принимал параметр типа Form1.

public Form2(Form1 frm1)
{
    mFrm1 = frm1;
    InitializeComponent();
}

Теперь, когда вы вызываете form2, отправьте тот самый экземпляр Form1 , который выполняет вызов:

Form2 frm2 = new Form2(this);
frm2.ShowDialog();

Теперь, когда выполнение достигло формы 2, вы можете получить доступ к MyData внутри формы 1:
mFrm1.dat;

Таким образом, оба экземпляра Form1 и Form2 будут ссылаться на данные, которые находятся в одном месте. Внесение изменений / обновлений будет доступно для обоих экземпляров форм.

0 голосов
/ 04 мая 2009

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

0 голосов
/ 04 мая 2009

позвольте мне переосмыслить вопрос я 2 форма f1, f2 ... я звоню Форма f2 = новая форма (); f2.ShowDialog (); * +1001 *

// теперь мне нужно передать параметр из окна f1 в f2 (это модальное диалоговое окно) и вернуть значение из формы f2 в f1

// теперь я использую переменные, которые находятся в общем пространстве имен (для обоих f1, f2)

0 голосов
/ 04 мая 2009

Если вы просто хотите отправить данные в свой дочерний диалог, рассмотрите возможность добавления параметров в конструктор дочернего диалога, затем вызовите ShowDialog (). Однако передача данных другим способом немного сложнее.

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