Как запретить пользователю закрывать Winform c # - PullRequest
1 голос
/ 19 декабря 2011

Я знаю, что это очень простой вопрос, но я ищу аккуратное и чистое предложение. Мое приложение является приложением MDI. Создана базовая форма, которая используется во всем приложении. Есть несколько форм, которые мы не хотим, чтобы пользователь закрывал, поэтому, чтобы избежать человеческих ошибок, мы планировали запретить пользователю закрывать эти формы.

Я пытался установить e.cancel = true в событии закрытия формы, но кажется, что оно не работает, может кто-нибудь дать мне несколько советов, пожалуйста?

Edit:

Private void FrmTask_FormClosing(object sender, FormClosingEventArgs e)
        {         
                e.Cancel = true;
        }

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

Ответы [ 3 ]

2 голосов
/ 19 декабря 2011

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

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

private void Form_Closing(object sender, EventArgs e)
{
  if( !allowShutdown) e.Cancel = true;
}

public void ForceShutdown()
{
  allowShutdown = true;
  Close();
}

А потом в родительской форме:

private void Form_Closing(object sender, EventArgs e)
{
  if( childForm != null ) childForm.ForceShutdown();
}

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

2 голосов
/ 19 декабря 2011

Вы также не можете показать кнопку закрытия:

http://blogs.msdn.com/b/atosah/archive/2007/05/18/disable-close-x-button-in-winforms-using-c.aspx

Коди Грей предоставил лучшую ссылку в комментариях, которая также запрещает закрытие Alt-F4:

https://stackoverflow.com/a/4655948/366904

0 голосов
/ 19 декабря 2011

Я подозреваю, что FormClosingEventArgs.CloseReason даст вам достаточно информации, чтобы определить, следует ли условно отменить закрытие.

...