Как я могу передать значения из одной формы в другую?

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

10 ответов

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

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

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

public void load()
{
  if (this.Tag.length > 0)
  {
     // do something with the data
  }
}
int x=10;
Form1 f2 = new Form1(x);
f2.ShowDialog();

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

и это будет так

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

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

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

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

НТН

Допустим, у вас есть элемент управления 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, чтобы быть более понятным]

Используйте определенный тип для вашей информации (класс, структура...) и объявите переменную этого в 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();

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

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

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

Позвольте мне перефразировать вопрос: я задаю форму 2: f1, f2... я называю форму f2 = новая форма (); f2.ShowDialog ();

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

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

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

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

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

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

и в исходной форме вызвать форму, как это

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

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

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

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

Другие вопросы по тегам