2015-08-16 2 views
1

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

я смог добиться этого с помощью FormClosing событий формы, как это:

this.Hide(); 
e.Cancel = true; 

Но, к сожалению, также останавливает любые другие кнопки закрытия I место на форме.

Есть ли способ остановить кнопку по умолчанию в правом верхнем углу, но все же можно закрыть форму в другом месте?

+0

установить булевский флаг. –

+0

@ DanielA.White Можете ли вы уточнить, как полезно использовать логическое значение? Благодарю. –

ответ

2

Это простой логический пример:

bool ExitApplication = false; 

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
    switch(ExitApplication) 
    { 
     case false: 
     this.Hide(); 
     e.Cancel = true; 
     break; 

     case true: 
     break; 
    } 
} 

Итак, когда вы хотите, чтобы закрыть приложение просто установить ExitApplication истина.

+0

лучше было бы проверить «CloseReason» в 'FormClosingEventArgs', –

0

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

public partial class Form1 : Form 
{ 
    const int MfByposition = 0x400; 
    [DllImport("User32")] 
    private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags); 
    [DllImport("User32")] 
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 
    [DllImport("User32")] 
    private static extern int GetMenuItemCount(IntPtr hWnd); 
    public Form1() 
    { 
     InitializeComponent(); 
     var hMenu = GetSystemMenu(Handle, false); 
     var menuItemCount = GetMenuItemCount(hMenu); 
     RemoveMenu(hMenu, menuItemCount - 1, MfByposition); 
     ... 
    } 
} 
+0

Извините, но для меня это выглядит слишком сложно. –

+0

Я хочу понять, что я использую, не просто скопировать чужую работу, спасибо! –

+0

Это обычный вызов метода DLL от пользователя32. –

0

Другой способ отключить «X» в правом верхнем углу:

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      const int CS_NOCLOSE = 0x200; 
      CreateParams cp = base.CreateParams; 
      cp.ClassStyle |= CS_NOCLOSE; 
      return cp; 
     } 
    } 

} 

форма еще может быть закрыто программно с this.Close();.