Windows Forms: Как скрыть кнопку «Закрыть» (x)? - PullRequest
129 голосов
/ 05 сентября 2011

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

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

Большое спасибо!

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

Ответы [ 8 ]

145 голосов
/ 10 ноября 2012

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

132 голосов
/ 05 сентября 2011

Вы не можете скрыть это, но вы можете отключить его, переопределив свойство 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

24 голосов
/ 05 сентября 2011

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

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

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

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

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

11 голосов
/ 30 мая 2018

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

this.ControlBox = false;

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

enter image description here

7 голосов
/ 05 сентября 2011

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

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

2 голосов
/ 27 мая 2017

В свойствах вашей формы установите 'Control Box' = False, но он также скроет Minimized и Maximize.

1 голос
/ 27 сентября 2017

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

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

, затем создайте элемент полосы меню для выхода из приложения.

ура

0 голосов
/ 22 февраля 2018

, если это опция, вы можете установить

 this.FormBorderStyle = FormBorderStyle.None;

, затем воссоздать кнопки сворачивания и максимизации

    private void button1_Click(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Maximized;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Minimized;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...