Как я могу ссылаться на form1 от form2, не вызывая бесконечный цикл? - PullRequest
1 голос
/ 20 сентября 2011

В моей основной форме (form1) у меня есть флажки, которые при установленном флажке должны также поставить галочку в соответствующем поле в form2. Я также хочу, если флажки в form2 установлены, они проверяют соответствующие поля в form1. Проблема, с которой, как мне кажется, я сталкиваюсь, заключается в том, что form1 может сделать объект form2 для ссылки, однако, если я создаю экземпляр объекта form1 в form2, я считаю, что он создает бесконечный цикл? Любая помощь в выяснении этого приветствуется.

Form1 создает объект form2:

    Form2 formSettings = new Form2();

Теперь, когда у меня есть событие, я могу обновить форму2:

      public void logScanResultsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (logScanResultsToolStripMenuItem.Checked)
        {
            formSettings.chbxLogScanResults.Checked = true;

        }
        else
        {
            formSettings.chbxLogScanResults.Checked = false;

        }        
    }         

Но если я попытаюсь сделать что-то подобное в Form2:

   Form1 form1 = new Form1();

Так что я могу ссылаться на элемент меню form1 из form2 (formSettings). В итоге я создаю объект (form1), который вызывает создание объекта Form1, который в Form1 включает вызов для создания объекта Form2 и, таким образом, бесконечный цикл.

Ответы [ 3 ]

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

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

0 голосов
/ 20 сентября 2011

В теле формы Form1 вам нужно объявить Form2 для хранения его экземпляра для ссылки и его открытия. Когда вы вызываете метод Form2.Show из Form1, вы передаете ссылку на себя в Form2, которую затем можете использовать для получения доступа к Form1.

public partial class Form1 : Form
{
    Form2 form2 = new Form2();

    public Form1()
    {
        InitializeComponent();
    }

    private void form1Button_Click(object sender, EventArgs e)
    {
        form2.Show(this);
    }

    private void form1CheckBox_CheckedChanged(object sender, EventArgs e)
    {
        form2.ChangeCheck(form1CheckBox.Checked);
    }

    public void ChangeCheck(bool isItChecked)
    {
        form1CheckBox.Checked = isItChecked;
    }
}

В Form2 теперь вы можете ссылаться на Form1 как на владельца.

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

    private void form2CheckBox_CheckedChanged(object sender, EventArgs e)
    {
        ((Form1)this.Owner).ChangeCheck(form2CheckBox.Checked);
    }

    public void ChangeCheck(bool isItChecked)
    {
        form2CheckBox.Checked = isItChecked;
    }
}
0 голосов
/ 20 сентября 2011

Надеюсь, это достаточно ясно. Это не прямой ответ, так как в вашем вопросе не так много деталей.

Обычно у вас есть две формы, Form1 и Form2, которые будут генерировать события (OnChangeEvent?) При изменении некоторых флажков.

Form1 прослушивает события из Form2, а Form2 делает то же самое из Form1.

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

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