Передача данных между формами - PullRequest
2 голосов
/ 19 сентября 2011

У меня есть 3 winforms в моем проекте, и в Form3 есть флажок.То, что я хочу сделать, это установить этот флажок, а затем при выходе из формы сделать такую ​​же проверку (независимо от того, отмечена ли она или нет) в форме Form1.У меня есть следующий код, но он просто не сработает.Спасибо.

//Form3

Form1 setDateBox = new Form1();
setDateBox.setNoDate(checkBox1.Checked);

//Form1

public void setNoDate(bool isChecked)
{
    checkBox1.Checked = isChecked;
}

Ответы [ 4 ]

3 голосов
/ 19 сентября 2011

Пара подходов:

1 - Сохраните переменную Form1 "setDateBox" как член класса Form3 и затем получите доступ к методу "setNoDate" из флажков Обработчик события CheckedChanged:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    setDateBox.setNoDate(checkBox1.Checked);
}

2 - Если вы не хотите хранить setDateBox в качестве члена класса или вам нужно обновить более одной формы, вы можете определить событие в Form3 следующим образом:

public event EventHandler<CheckedChangedEventArgs> CheckBox1CheckedChanged;

...

public class CheckedChangedEventArgs : EventArgs
{
    public bool CheckedState { get; set; }

    public CheckedChangedEventArgs(bool state)
    {
        CheckedState = state;
    }
}

Создайте обработчик для события в форме Form1:

public void Form1_CheckBox1CheckedChanged(object sender, CheckedChangedEventArgs e)
{
    //Do something with the CheckedState
    MessageBox.Show(e.CheckedState.ToString());
}

Назначьте обработчик события после создания формы:

Form1 setDateBox = new Form1();
CheckBox1CheckedChanged += new EventHandler<CheckedChangedEventArgs>(setDateBox.Form1_CheckBox1CheckedChanged);

И затем запустите событиеиз формы 3 (после изменения состояния флажка):

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if(CheckBox1CheckedChanged != null)
        CheckBox1CheckedChanged(this, new CheckedChangedEventArgs(checkBox1.Checked));
}

Надеюсь, это поможет.

2 голосов
/ 19 сентября 2011

В конструкторе формы, содержащей флажок, Сделать его внутренним или общедоступным.Затем вы можете получить доступ к элементу управления из объекта формы.Это быстрый и грязный способ достичь, но это может решить вашу проблему.

ex 
In form1.designer.cs
existing
private CheckBox checkbox1;

new one

internal CheckBox checkbox1; or
public CheckBox checkbox1;
2 голосов
/ 19 сентября 2011

Вы создаете новый экземпляр Form1 и не ссылаетесь на его существующий экземпляр.

Form1 setDateBox = (Form1)this.Owner

Это должно решить вашу проблему.

2 голосов
/ 19 сентября 2011

checkBox1 является членом Form3, поэтому с Form1 вы не можете ссылаться на него таким образом.

Вы могли бы:

  • создайте отдельный класс, который вы разделяете между вашими формами и который хранит значения, влияющие на все приложение
  • сделать Form3.checkBox1 общедоступным, чтобы вы могли ссылаться на него по myForm3Instance.checkBox1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...