Визуально удалить/отключить кнопку "закрыть" из заголовка 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