Как остановить закрытие формы окна, но скрыть при нажатии X? - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь создать событие клика, которое откроет другую форму.Я не хочу, чтобы пользователь мог закрыть это окно, потому что я получаю следующее исключение при повторном выполнении события click.

System.ObjectDisposedException: 'Невозможно получить доступ к удаленному объекту.Имя объекта: 'Form2'. '

Я не уверен, правильно ли я это реализую или есть лучший способ сделать это.

Form1


public Form2 f = new Form2();

private void Btnsearch_Click(object sender, EventArgs e)
{
    f.Show();
}

Форма 2


private bool allowClose = false; 
private void Btnclose_Click(object sender, EventArgs e)
{
    allowClose = true;
    this.Hide();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
    if (!allowClose)
        e.Cancel = true;
}

Ответы [ 3 ]

2 голосов
/ 28 апреля 2019

Подпишитесь на Form.OnClosing и устанавливайте свойство Cancel для аргументов события, которые передаются обработчику.Это сообщит среде выполнения об отмене события закрытия.

Поскольку событие отменяется, вам придется скрыть форму самостоятельно (конечно, используя Hide()).

private void Form1_Closing(Object sender, CancelEventArgs e)
{
    this.Hide();
    e.Cancel = true;
}
0 голосов
/ 28 апреля 2019

Экземпляр form2 должен быть создан внутри события



private void Btnsearch_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
    f.Show();
}
0 голосов
/ 28 апреля 2019

Для этого есть несколько способов.

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

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

В любом случае, все, что вам нужноВ частности, нужно добавить некоторые меры безопасности в обработчик btnSearch, чтобы он мог соответствующим образом реагировать на состояние формы f;

public Form2 f;
public void BtnSearch_Click(object sender, EventArgs e)
{
    if (f == null || f.IsDisposed || f.Disposing) f = new Form2(...);
    f.Show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...