Як приховати лише кнопку Close (x)?


151

У мене є модальне діалогове вікно, і мені потрібно приховати кнопку Закрити (X), але я не можу користуватися ControlBox = false, тому що мені потрібно тримати кнопки Мінімізувати та Максимізувати.

Мені потрібно приховати лише кнопку Закрити, чи є спосіб це зробити?

Дуже дякую!

Оновлення: у мене був дозвіл відключити його, що простіше :) Дякую всім!


Чи може це те, чого ви хочете: [Сховати кнопку закриття [X] Win Forms в C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/… ) просто гуглили : hide close button c#другий результат тут! =)
Мігель Анджело

ви помиляєтесь, я не хочу відключити кнопку, але приховати її .. Ви можете знайти рішення?
stefano m

8
Потреба - це сильне слово. Звідки ця вимога? Яка фактична вимога - щоб користувач не міг припинити програму або щоб інтерфейс користувача «виглядав, що у нього немає кнопки закриття»? Тому що існують інші способи цього, і вам буде важко натиснути, щоб повністю закрити їх (наприклад, диспетчер завдань, taskkill, можливо, alt + f4 тощо). Я особисто не працював над цим надто сильно, тому що якщо ви все одно не переобладнаєте всю свою програму, це буде витрачено даремно і не порушить очікування / наступність користувачів з іншими програмами Windows.
Мерлін Морган-Грем

4
@ Скажіть, це відкриває цю сторінку, тому не будьте таким критиком.
Брайан Грехем

1
Скрепуйте кнопку мінімізації також зі свого списку. Мінімізація модального діалогу автоматично закриє його. Неодмінно, це єдине вікно, що залишилося, досі ввімкнено. Коли ви мінімізуєте це, не залишиться жодного вікна, яке все ще може отримати фокус, щоб користувач не міг повернутися до вашої програми. Ви зараз в "чи це все ще має сенс?" території. Це не так.
Ганс Пасант

Відповіді:


148

Ви не можете його приховати, але ви можете відключити його, замінивши властивість CreateParams форми.

private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
       CreateParams myCp = base.CreateParams;
       myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON ;
       return myCp;
    }
}

Джерело: http://www.codeproject.com/KB/cs/DisableClose.aspx


дякую, я знайшов це рішення, але ми хотіли б його приховати, а не просто відключити :( anywat спасибі!
stefano m

4
не існує іншого способу, як створити форму з нуля.
Даніель А. Білий

так. краще складіть власну форму за допомогою власного поля керування без кнопки закриття, а потім прихойте поле управління батьківської форми.
Bahamut

Відповідь "Abhishek.Chopra" проста та ефективна.
Альтаф Патель

Як увімкнути його під час виконання знову?
Майк де Клерк

158

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


29
Ви читали питання, де він уточнив, що це не варіант?
Сервіс

28
Здійснив пошук у Google, і цей SO QA став найкращим хітом. І ця відповідь була тим, що я шукав. Дякую Абхішек ...
Абель Гаксіола

15
Це приховує всі ці кнопки розміру. Не лише X.
Річ Шиллер

1
Дуже дякую! Найпростіший спосіб.

26

Ну, ви можете приховати це, видаливши все системне меню:

private const int WS_SYSMENU = 0x80000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style &= ~WS_SYSMENU;
        return cp;
    }
}

Звичайно, це видаляє кнопки мінімізації та максимізації.

Якщо ви зберігаєте системне меню, але виймаєте елемент закриття, кнопка закриття залишається, але вимикається.

Остаточна альтернатива - пофарбувати зону, яка не є клієнтом, самостійно. Це досить важко отримати правильно.


4
Це теж працює, чудово! Але ControlBox = false просто використовувати як свій шлях.
simmeone

1
Це те саме, що встановити ControlBoxзначення false. Крім того, це не відповідає вимозі: мені потрібно тримати кнопки "Звести і Максимально"
whiteshooz

23

ви можете приховати тісний ящик, використовуючи

this.ControlBox = false;

і не забудьте додати пробіл, this.Text = " "щоб зробити його таким

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


2
Це те, що мені потрібно. Дякую.
Космас

2
Це неправильно. Безпосередньо з питання ОП: Не можу використатиControlBox = false
Мартін

8

Якщо ви дійсно хочете його приховати, як у "не видно", вам, ймовірно, доведеться створити форму без полів і намалювати компоненти підписів самостійно. У бібліотеці VisualStyles доступні елементи Windows. Вам також доведеться додати функціональність щодо повторного розміру форми або переміщення форми, захопивши панель підписів. Не кажучи вже про системне меню в кутку.

У більшості випадків важко виправдати відсутність кнопки "закрити", особливо якщо ви хочете модальну форму з мінімізацією можливостей. Мінімізація модальної форми справді не має сенсу.


2

У властивостях вашої форми встановіть 'Control Box' = Неправильно, але він також буде приховувати Мінімізовано та Максимізувати.


1

Добре ви можете приховати кнопку закриття, змінивши FormBorderStyle з розділу властивостей або програмно в конструкторі, використовуючи:

public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
}

потім ви створюєте пункт смужки меню для виходу з програми.

ура

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.