Как убрать кнопку закрыть в windows forms

Обновлено: 04.07.2024

Если задача в том, чтобы запретить пользователю закрывать форму этой кнопкой, то попробуйте так:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If UnloadMode = vbFormControl_Menu Then
Cancel = 1
End If
End Sub

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

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If UnloadMode = vbFormControl_Menu Then
Cancel = 1
End If
End Sub


А не подскажете где именно код выполняется?
PS. Ясно что в VBA, точнее!

Originally posted by Psion
А не подскажете где именно код выполняется?
PS. Ясно что в VBA, точнее!


В модуле кода той формы, которую "спасаете" от закрывания.

Originally posted by Psion
Вопрос: Как убрать крестик из верхнего правого угла UserForm?

Ubrat' nel'zja, a sdelat' desabled mozhno:

А я помнится как то решил эту проблему установкой свойства формы UsForm1.Top=-24. При этом не забыв сделать кнопку на форме,для закрытия формы.И смотрится симпатично. Если речь идёт о "чистом" VB, то насколько я помню, там наличествует возможность убрать заголовок с формы, ну а вместе с заголовком должен исчезнуть и столь "ненавистный" Вам крестик.

Originally posted by Dmitrii
Если задача в том, чтобы запретить пользователю закрывать форму этой кнопкой, то попробуйте так:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If UnloadMode = vbFormControl_Menu Then
Cancel = 1
End If
End Sub

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

В VB6 нет UserForm_QueryClose, но есть
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = 1
End Sub

Но тогда придётся выходить через "End", т.к любой Unload будет нейтрализован. Или смотреть значение UnloadMode: 0 - это Form, 1 - это из кода - типа "Unload Me", 2 - это Windows Logoff, а можно посмотреть MSDN на "QueryUnload Event", там более подробно.

У меня есть модальный диалог, и мне нужно скрыть кнопку закрытия (X), но я не могу использовать ControlBox = false , потому что мне нужно сохранить кнопки минимизации и максимизации.

Мне нужно скрыть только кнопку Закрыть, есть ли способ сделать это?

Update: у меня было разрешение отключить его, что проще :) спасибо всем!

вы не можете скрыть его, но вы можете отключить его, переопределив свойство CreateParams формы.

мы можем скрыть кнопку "закрыть" на форме настройки this.ControlBox=false;

Ну, вы можете скрыть его, удалив все системное меню:

конечно, это удаляет кнопки минимизации и максимизации.

Если вы сохраняете системное меню, но удаляете пункт Закрыть, кнопка Закрыть остается, но отключена.

окончательная альтернатива-нарисовать не клиентскую область самостоятельно. Это довольно трудно понять.

Если вы действительно хотите скрыть его, как в "не видно", то вам, вероятно, придется создать форму без границ и нарисовать компоненты заголовка самостоятельно. Библиотека VisualStyles имеет доступные элементы Windows. Вам также придется добавить обратно в функциональность изменения размера формы или перемещения формы, схватив панель заголовка. Не говоря уже о меню в углу.

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

вы можете скрыть закройте окно с помощью

и не забудьте добавить пробел в this.Text = " " чтобы сделать это так

enter image description here

в свойствах вашей формы установите "Control Box" = False, но он также скроет минимизированный и Максимизированный.

Ну, вы можете скрыть кнопку закрытия, изменив FormBorderStyle из раздела свойств или программно в конструкторе, используя:

У меня есть модальное диалоговое окно, и мне нужно скрыть кнопку «Закрыть» (X), но я не могу использовать ControlBox = false , потому что мне нужно сохранить кнопки «Развернуть» и «Развернуть».

Мне нужно спрятать только кнопку Закрыть, есть ли способ сделать это?

Обновление: у меня было разрешение отключить его, что проще :) Спасибо всем!

вы не правы, я не хочу отключить кнопку, но скрыть ее .. вы можете найти решение? Нужно это сильное слово. Откуда это требование? Каково реальное требование - чтобы пользователь не мог завершить программу или чтобы пользовательский интерфейс "выглядел так, как будто у него нет кнопки закрытия"? Потому что есть другие способы обойти это, и вам будет трудно полностью закрыть все из них (например, диспетчер задач, taskkill, возможно, alt + f4 и т. Д.). Лично я не стал бы слишком усердно работать над этим, потому что, если вы все равно не перекрасите свое приложение целиком, это будет напрасной тратой усилий и нарушит ожидания пользователей / преемственность с другими программами Windows. @ Скажем, это открывает эту страницу, так что не будь таким критиком. Вычеркните также кнопку свертывания из вашего списка. Минимизация модального диалога автоматически закроет его. Обязательно, это единственное оставшееся окно, которое все еще включено. Когда вы минимизируете его, не останется ни одного окна, которое все еще может сфокусироваться, чтобы пользователь не мог вернуться к вашей программе. Вы сейчас в "это все еще имеет смысл?" территория. Это не так.

Вы не можете скрыть это, но вы можете отключить его, переопределив свойство CreateParams формы.

спасибо, я нашел это решение, но мы хотели бы скрыть его, а не просто отключить :( в любом случае спасибо! нет другого способа, кроме как создать свою форму с нуля. Да. Лучше создайте свою собственную форму с вашим собственным блоком управления без кнопки закрытия, а затем скройте блок управления родительской формы.

Мы можем скрыть кнопку закрытия на форме, установив this.ControlBox=false;

Сделал поиск Google, и этот SO QA был лучшим хитом. И этот ответ был тем, что я искал. Спасибо, Абхишек .

Ну, вы можете скрыть это, удалив все системное меню:

Конечно, при этом удаляются кнопки минимизации и максимизации.

Если вы удерживаете системное меню, но удаляете элемент закрытия, кнопка закрытия остается, но не работает.

Последняя альтернатива - нарисовать область, не относящуюся к клиенту, самостоятельно. Это довольно сложно понять правильно.

Это тоже работает, отлично! Но ControlBox = false легко использовать по-вашему. Это то же самое, что и установка ControlBox в false. Кроме того, оно не соответствует требованию: мне нужно сохранить кнопки «Свернуть» и «

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

и не забудьте добавить пробел, this.Text = " " чтобы сделать это так

введите описание изображения здесь

Это не правильно. Непосредственно из вопроса ОП: я не могу использовать ControlBox = false

Если вы действительно хотите скрыть это, как в «невидимом», то вам, вероятно, придется создать форму без полей и нарисовать компоненты заголовка самостоятельно. Библиотека VisualStyles имеет доступные элементы Windows. Вы также должны были бы добавить обратно функциональность изменения размера формы или перемещения формы, захватив строку заголовка. Не говоря уже о системном меню в углу.

В большинстве случаев трудно оправдать отсутствие кнопки «закрыть», особенно если вам нужна модальная форма с минимизирующими возможностями. Минимизация модальной формы действительно не имеет смысла.

Если задача в том, чтобы запретить пользователю закрывать форму этой кнопкой, то попробуйте так:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If UnloadMode = vbFormControl_Menu Then
Cancel = 1
End If
End Sub

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

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If UnloadMode = vbFormControl_Menu Then
Cancel = 1
End If
End Sub


А не подскажете где именно код выполняется?
PS. Ясно что в VBA, точнее!

Originally posted by Psion
А не подскажете где именно код выполняется?
PS. Ясно что в VBA, точнее!


В модуле кода той формы, которую "спасаете" от закрывания.

Originally posted by Psion
Вопрос: Как убрать крестик из верхнего правого угла UserForm?

Ubrat' nel'zja, a sdelat' desabled mozhno:

А я помнится как то решил эту проблему установкой свойства формы UsForm1.Top=-24. При этом не забыв сделать кнопку на форме,для закрытия формы.И смотрится симпатично. Если речь идёт о "чистом" VB, то насколько я помню, там наличествует возможность убрать заголовок с формы, ну а вместе с заголовком должен исчезнуть и столь "ненавистный" Вам крестик.

Originally posted by Dmitrii
Если задача в том, чтобы запретить пользователю закрывать форму этой кнопкой, то попробуйте так:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If UnloadMode = vbFormControl_Menu Then
Cancel = 1
End If
End Sub

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

В VB6 нет UserForm_QueryClose, но есть
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = 1
End Sub

Но тогда придётся выходить через "End", т.к любой Unload будет нейтрализован. Или смотреть значение UnloadMode: 0 - это Form, 1 - это из кода - типа "Unload Me", 2 - это Windows Logoff, а можно посмотреть MSDN на "QueryUnload Event", там более подробно.

https://drive.google.com/file/d/0B4XV2HrbrpDZX0xnZ1o1SHhiWm8/view?usp=drivesdk

Я хотел бы удалить выделение после каждого щелчка, потому что я установил acceptbutton и ActiveControl на кнопку " equal " этой программы. Я хочу, чтобы операция AcceptButton имела место вместо ввода выделенного текста кнопки, когда я нажимаю клавишу Enter на клавиатуре, Есть идеи? Благодарю.

Вот решение:

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

И то, как Windows указывает, что элемент управления имеет фокус ввода (по крайней мере, под темой Aero), имеет тонкую синюю подсветку.

В частности, для управления кнопками, когда у него есть фокус ввода, просто нажатие клавиши Enter будет "нажимать" эту кнопку. Вот почему сохранение подсветки очень важно, так что пользователь знает, чего ожидать.

Лучшим решением является установка фокуса на другой элемент управления в вашем окне сразу же после нажатия пользователем кнопки. Таким образом, он больше не будет автоматически подсвечен, и никакие действия не будут автоматически активированы, когда пользователь нажимает клавишу Enter . (Это реальная проблема юзабилити, которую вы пытаетесь решить, даже если вы еще этого не знаете. Ничто не более запутывает, чем кнопку, случайно нажимая кнопку, когда пользователь на самом деле пытается что-то ввести).

Вы можете не допустить, чтобы кнопка вообще получала фокус, установив для свойства Focusable значение false, но я бы очень рекомендовал против этого. Как только вы это сделаете, пользователь не сможет "нажать" кнопку, используя только клавиатуру. Хорошо разработанные приложения всегда должны быть доступны пользователям, которые либо предпочитают, либо не могут использовать мышь.

Учитывая, что вы "хотите, чтобы операция AcceptButton место вместо ввода выделенного текста кнопки, когда я нажимаю клавишу Enter на клавиатуре". Одно из решений заключается в том, чтобы обработчик кликов для каждой кнопки фокусировался на = .

Google "winforms control set focus" для деталей кода.

Это сохранит доступность: пользователи с клавиатурой могут Tab на желаемую кнопку, нажмите Enter , чтобы "щелкнуть" кнопку. Затем ваш обработчик щелчка будет фокусироваться на = , поэтому будет ясно, что другой Enter выполнит действие = .

Он также дает понять любому пользователю, что они могут нажать Enter в любое время, чтобы получить = .

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

Читайте также: