Визуально удалить/отключить кнопку "закрыть" из заголовка bar.NET

меня попросили удалить или отключить кнопку закрытия из нашего приложения VB .NET 2005 MDI. В форме нет собственных свойств, которые позволяют вам выделять серым цветом кнопку закрытия, чтобы пользователь не мог ее закрыть, и я не помню ничего в классе формы, что позволит мне это сделать.

возможно ли вызов API или какое-либо магическое свойство для установки или функции для вызова в .NET 2005 или более поздней версии это?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

дополнительная информация:

Мне нужно поддерживать минимизировать / максимизировать функциональность

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

13 ответов


на основе последней информации, которую вы добавили в свой вопрос, перейдите к концу моего ответа.


это то, что вам нужно установить в false: форма.Свойство ControlBox

но вы потеряете кнопки минимизации и максимизации, а также меню приложения (вверху слева).

в качестве альтернативы переопределите OnClose и установите Cancel в true (пример C#):

protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (e.CloseReason != CloseReason.WindowsShutDown && e.CloseReason != CloseReason.ApplicationExitCall)
    {
        e.Cancel = true;
    }

    base.OnFormClosing(e);
}

Если ни одно из этих решений не является приемлемым, и вы должны отключить только кнопку закрытия, вы можете перейти на маршрут pinvoke/createparams:

Как отключить кнопку закрытия из формы окна с помощью приложения .NET

Это версия VB кода jdm:

Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overloads Overrides ReadOnly Property CreateParams() As    CreateParams
   Get 
      Dim myCp As CreateParams = MyBase.CreateParams 
      myCp.ClassStyle = myCp.ClassStyle Or CP_NOCLOSE_BUTTON 
      Return myCp 
   End Get 
End Property 

вы можете отключить кнопку Закрыть и пункт меню закрыть в системном меню, изменив "стиль класса" окна. Добавьте в форму следующий код:

const int CS_NOCLOSE = 0x200;

protected override CreateParams CreateParams {
    get {
        CreateParams cp = base.CreateParams;
        cp.ClassStyle |= CS_NOCLOSE;
        return cp;
    }
}

Это не просто окно закрывается, но на самом деле серый кнопку. Это C#, но я думаю, что его легко перевести на VB.


вот простой способ удалить кнопку закрытия:
1. Выберите форму
2. Теперь перейдите к Properties.
3. Найти ControlBox и меняем значение False.

Это позволит удалить все кнопки управления (например, минимизировать, максимизировать, выход), а также значок также что находится в левом углу перед заголовком.


вы должны иметь возможность переопределить событие OnClose формы. Это обычно, когда приложение сворачивается в системный лоток при "закрытии".


при нажатии на поле X на форме. The Form1_Closing делается сначала, затем Form1_Closed сделано.

на e.Cancel = True на Form1_Closing - предотвращает Form1_Closed от вызова поэтому, оставляя вашу форму все еще активной.


запретить закрывать форму, но скрыть ее:

Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Me.WindowState = FormWindowState.Minimized 
    Me.Visible=false
    e.Cancel = True
End Sub

Вы можете установить ControlBox свойство False, но вся строка заголовка исчезнет, но сам заголовок...


что сказал jmweb здесь - это хорошо, как хорошо. Кнопка X close не будет работать, если вы отмените событие при закрытии формы. Но при этом вам нужно освободить процессы, необходимые форме, а затем закрыть форму.

Me.Dispose()
Me.Close()

это сработало для меня с помощью полосы меню.


выберите (или щелкните) саму форму Нажмите на события в окне Свойства (маленький значок молнии). Ищите Form.Closing и дважды щелкните по нему. Затем введите:e.cancel=true


создание формы без заголовка в Visual Basic.

на Form Properties и установить как ControlBox и ShowIcon значение false.

затем очистите все текст из формы text собственность.


перейдите в свойства и выберите из скучного стиля, как нет


просто выберите требуемую форму и в разделе свойства установите controlBox = false Это просто сработало для меня:)


Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    Beep()
    e.Cancel = True
End Sub