Обработка событий (обнаружение при скрытии формы) - PullRequest
7 голосов
/ 03 февраля 2012

Ну, как правило, я неплохо разбираюсь в проблемах и исследую их без руководства, однако наткнулся на загадку.Я пытаюсь создать «Событие» с C # (что я не делал раньше), все, что я искал, не имеет ничего общего с тем, что мне нужно.

Я пытаюсь вызвать класс в моей главной форме, когда form2 скрыта.Я нашел какой-то код, который должен был проверить, чтобы увидеть, закрыта ли форма2 - Либо я не интегрировал его в свой код должным образом, либо закрытие отличается от сокрытия.

Итак, просто чтобы уточнить, я хочу запустить программу следующим образом:

  • Запуск Form1
  • Нажмите кнопку настройки на Form1, которая откроет Form2
  • Откроется форма Form2, в которой можно изменить настройки
  • Нажмите кнопку «ОК» на форме Form2 (здесь я хочу, чтобы Form1 осознала, что Form2 скрыта
  • Скрыть форму один и запустить класс с именем Refreshкоторый обновляет названия кнопок и URL-адреса

Ответы [ 4 ]

4 голосов
/ 05 октября 2016

Также вы можете использовать VisibleChanged событие в Form2

private Form2_VisibleChanged(object sender, EventArgs e)
{
    if (!this.Visible) { Refresh(); }
}

Это может быть более элегантно ...

3 голосов
/ 03 февраля 2012

Открыть вторую форму как модальный

Form2 form2 = new Form2();
DialogResult result = form2.ShowDialog();

проверить результат и обновить:

if (result == DialogResult.OK)
    Refresh();

То, что вам также нужно сделать в этом случае, это при закрытии набора форм DialogResult формы, например, если у вас есть кнопка ОК, в наборе обработчиков кнопок:

this.DialogResult = DialogResult.OK;

Это автоматически закроет форму, и я правильно помню.

То, что вы также можете сделать, это установить DialogResult.Cancel на кнопку отмены, если вам это нужно.

1 голос
/ 03 февраля 2012

Если я правильно понимаю, вам нужен класс, в котором хранится информация о настройках, к которой могут иметь доступ как Form1, так и Form2. Давайте назовем этот класс Form1Settings и реализуем как:

public static class Form1Settings
{
    public static string ButtonText;
    public static string Uri;
}

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

Form1 будет вызывать Form2 блокирующим образом и обновлять его отображение только при нажатии кнопки ОК.

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

    public Form1()
    {
        InitializeComponent();
    }

    private void buttonSettings_Click(object sender, EventArgs e)
    {
        if (form2.ShowDialog() == DialogResult.OK)
        {
            this.button1.Text = Form1Settings.ButtonText;
            this.textBoxUrl.Text = Form1Settings.Uri;
            this.Update();
        }
    }
}

И, наконец, Form2 обновит значения настроек с помощью ввода от пользователя:

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

    private void buttonOK_Click(object sender, EventArgs e)
    {
        Form1Settings.ButtonText = this.textBoxButton.Text;
        Form1Settings.Uri = this.textBoxUri.Text;

        this.DialogResult = DialogResult.OK;
        this.Hide();
    }
}
1 голос
/ 03 февраля 2012

Почему бы не открыть Form2 как модальное диалоговое окно, используя ShowDialog()?Таким образом, вы можете вернуть значение, если Form2 была закрыта на OK или Cancel и действовать соответственно в Form1 после возврата вызова.

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