Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/56: Рейтинг темы: голосов - 56, средняя оценка - 4.59
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180

Как отключить кнопку "Закрыть" на форме?

11.05.2020, 21:42. Показов 11062. Ответов 23

Студворк — интернет-сервис помощи студентам
Как отключить кнопку закрыть на форме в Visual Studio так, чтобы развернуть и свернуть остались, так как на скриншоте. Не пишите про ControlBox, потому что он уберет все кнопки, а мне нужно только "Закрыть". Если что я программирую на visual basic.
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.05.2020, 21:42
Ответы с готовыми решениями:

Как в форме заблокировать крестик(кнопку закрыть)?
Как в форме заблокировать крестик(кнопку закрыть)?

Как организовать событие при нажатии на кнопку ЗАКРЫТЬ на форме?
Подскажите пожалуйста, мне нужно чтобы при выходе из программы файл менял разрешение из .txt в .exe на данный момент у меня при...

Как скрыть кнопку "закрыть" на форме?
HI ALL Как сделать, чтобы на форме (в ControlBox-е) кнопка закрытия (Х) была не доступна (или скрытой). Или по-другому - чтобы...

23
97 / 33 / 12
Регистрация: 24.11.2018
Сообщений: 191
12.05.2020, 02:22
Не получится. Это основная кнопка, две остальные - вспомогательные. Её нельзя убрать, не задев две вторые.

Программно всё можно - но нужно будет поднапрячься.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
12.05.2020, 03:50
Лучший ответ Сообщение было отмечено rfvgy как решение

Решение

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

Во первых, не прибегая к WinAPI, в событии FormClosing вставьте строку e.Cancel = True нем самым отменять посылку сообщения окну с командой на закрытие.

Второй вариант - WinAPI:

Заблокировать действия кнопок управления формой
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
    Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Integer, ByVal bRevert As Integer) As Integer
    Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Integer, ByVal nPosition As Integer, ByVal wFlags As wFlag) As Integer
    
    Enum wFlag
        MinButton = 3
        MaxButton = 4
        CloseButton = 6
    End Enum
 
    Public Sub KillingMenu(hWnd As Long, wFlag As wFlag)
        RemoveMenu(GetSystemMenu(hWnd, 0), wFlag, &H400&)
    End Sub
Пример (блокируем нажатие кнопки Закрыть (так же убирается соответствующий пункт из системного меню формы):
VB.NET
1
KillingMenu(Me.Handle, wFlag.CloseButton)
3
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
12.05.2020, 08:09
Лучший ответ Сообщение было отмечено rfvgy как решение

Решение

Или так
VB.NET
1
2
3
4
5
6
7
8
9
Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            Const CS_DBLCLKS As Int32 = &H8
            Const CS_NOCLOSE As Int32 = &H200
            cp.ClassStyle = CS_DBLCLKS Or CS_NOCLOSE
            Return cp
        End Get
    End Property
3
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
12.05.2020, 09:21
Orlangur, CS_DBLCLKS - это сообщение двойного клика по заголовку? Если его игнорировать, то таким образом и пропадает возможность развернуть на весь экран окно по двойному клику по заголовку? Не проверял, но думаю - это именно это самое А ТСу это зачем? Ему ведь только кнопку ЗАКРЫТЬ надо заблокировать.

А так, да, еще один вариант, возьму в коллекцию
0
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
12.05.2020, 09:47  [ТС]
Спасибо всем, с вопросом темы разобрался, но возникли еще два вопроса.
1. &H8, &H200, &H400&. Это коды каких-то кнопок? Если да, то пришлите пожалуйста весь список.
2. Как по нажатию кнопки на форме сделать из НЕактивной кнопки закрыть активную?
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
12.05.2020, 09:51
Yury Komar, хм, описание такое
Стиль CS_DBLCLKS используется при необходимости отслеживать двойные щелчки мышью. При этом в функцию окна посылаются сообщения WM_LBUTTONDBLCLK и WM_RBUTTONDBLCLK. Если этот стиль не будет задан, как бы быстро вы ни щелкали мышью, функция окна получит только идущие парами сообщения о том, что вы нажимаете и отпускаете левую или правую клавишу мыши
На сколько я понимаю, если не указать этот стиль, то при двойном щелчке по заголовку, окно будет получать два WM_LBUTTONDOWN вместо одного WM_LBUTTONDBLCLK. Правда, если его не указывать, то это никак не влияет на
Цитата Сообщение от Yury Komar Посмотреть сообщение
возможность развернуть на весь экран окно по двойному клику по заголовку
Возможно, это влияет на что-то другое
1
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
12.05.2020, 10:03  [ТС]
Понял.А как, все таки по нажатию кнопки на форме сделать из НЕактивной кнопки закрыть активную?
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
12.05.2020, 10:06
rfvgy,
Цитата Сообщение от rfvgy Посмотреть сообщение
Это коды каких-то кнопок?
Это константы, для каждой функции свои значения, гуглите имя функции и смотрите константы

Цитата Сообщение от rfvgy Посмотреть сообщение
Как по нажатию кнопки на форме сделать из НЕактивной кнопки закрыть активную?
Для моего вариант выше не прокатит.

Добавляем, функцию GetSystemMenu берём из решения Yury Komar.
VB.NET
1
2
3
<DllImport("user32")>
    Public Shared Function EnableMenuItem(ByVal hMenu As IntPtr, ByVal itemId As UInteger, ByVal uEnable As UInteger) As Boolean
    End Function
Сделать кнопку неактивной
VB.NET
1
EnableMenuItem(GetSystemMenu(Me.Handle, False), &HF060, 1)
Сделать активной
VB.NET
1
 EnableMenuItem(GetSystemMenu(Me.Handle, False), &HF060, 0)
1
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
12.05.2020, 10:25  [ТС]
Не работает. Может я что-то не так сделал, вот скриншот. Там нет <DllImport("user32")> потому что куда бы я его не написал выдает ошибку.
Миниатюры
Как отключить кнопку "Закрыть" на форме?  
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
12.05.2020, 10:53
rfvgy,
VB.NET
1
2
3
<DllImport("user32")>
    Public Shared Function EnableMenuItem(ByVal hMenu As IntPtr, ByVal itemId As UInteger, ByVal uEnable As UInteger) As Boolean
    End Function
Вставить именно в таком виде, навести мышкой на DllImport, студия должна предложить исправление, в данном случае - импорт пространства имен
0
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
12.05.2020, 11:10  [ТС]
Да, действительно предложила исправление. Все работает, спасибо. А это будет работать на этом методе?
VB.NET
1
2
3
4
5
6
7
8
9
Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            Const CS_DBLCLKS As Int32 = &H8
            Const CS_NOCLOSE As Int32 = &H200
            cp.ClassStyle = CS_DBLCLKS Or CS_NOCLOSE
            Return cp
        End Get
    End Property
0
Лень — мое второе и
 Аватар для Orlangur
3226 / 2414 / 687
Регистрация: 28.11.2014
Сообщений: 3,600
Записей в блоге: 3
12.05.2020, 11:39
rfvgy,
Цитата Сообщение от rfvgy Посмотреть сообщение
А это будет работать на этом методе?
Нет
0
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
12.05.2020, 11:46  [ТС]
Ясно.

Добавлено через 1 минуту
Всем спасибо за помощь!)))
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
12.05.2020, 21:20
Лучший ответ Сообщение было отмечено rfvgy как решение

Решение

Orlangur, rfvgy, в таком случае, дополню свой код, чтобы иметь возможность включить обратно кнопки в RunTime'e

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Declare Function EnableMenuItem Lib "user32.DLL" (ByVal hMenu As Integer, ByVal ItemID As Integer, ByVal wEnable As Integer) As Integer
    Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Integer, ByVal bRevert As Integer) As Integer
 
    Enum menuItem
        MinButton
        MaxButton
        CloseButton
    End Enum
 
    Public Sub ManageControlBox(Frm As Form, mnuItem As menuItem, IsEnabled As Boolean)
        Select Case mnuItem
            Case menuItem.CloseButton
                EnableMenuItem(GetSystemMenu(Frm.Handle, False), &HF060, If(IsEnabled, 0, 1))
            Case menuItem.MinButton
                Frm.MinimizeBox = IsEnabled
            Case menuItem.MaxButton
                Frm.MaximizeBox = IsEnabled
        End Select
    End Sub
Вот так применять:
VB.NET
1
2
3
        ManageControlBox(Me, menuItem.MaxButton, True) 'или False
        ManageControlBox(Me, menuItem.MinButton, True) 'или False
        ManageControlBox(Me, menuItem.CloseButton, True) 'или False
5
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
12.05.2020, 23:28  [ТС]
Спасибо, я думаю я это где-то применю.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
13.05.2020, 03:59
rfvgy, тут имейте ввиду, что при отключении сразу обеих кнопок (MinButton и MaxButton) они исчезают с заголовка формы, до следующего включения...
0
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
13.05.2020, 12:12  [ТС]
Кстати кнопки свернуть и развернуть можно отключить через свойство minimizebox и maximizebox
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,254
14.05.2020, 16:32
Цитата Сообщение от rfvgy Посмотреть сообщение
через свойство minimizebox и maximizebox
а вы посмотрите мой код, строки 15 и 17. Я именно так это и делаю.
1
1 / 1 / 0
Регистрация: 26.01.2020
Сообщений: 180
14.05.2020, 17:28  [ТС]
Я на счет этого писал:
Цитата Сообщение от Yury Komar Посмотреть сообщение
ManageControlBox(Me, menuItem.MaxButton, True) 'или False
        ManageControlBox(Me, menuItem.MinButton, True) 'или False
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2020, 17:28
Помогаю со студенческими работами здесь

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

Как отключить кнопки: свернуть, закрыть
Всем привет. Видел подобные темы на форуме, но ничего не понял. Надо отключить кнопки: свернуть, закрыть в JavaFX Scene Builder. Если есть...

Переместить кнопку "закрыть" в форме
Добрый день. Подскажите, пожалуйста, можно ли переместить кнопки &quot;закрыть&quot;, &quot;свернуть&quot;, &quot;развернуть&quot; из правого верхнего...

Убрать кнопку "Закрыть" в форме
Добрый вечер. Поскажите можно ли как-нибудь убрать кнопку закрыть из угла формы и сотавить только развернуть и свернуть?, либо...

Как скрыть кнопку закрыть
Ну или хотя бы сделать ее неактивной


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru