Jak ukryć tylko przycisk Zamknij (x)?

151

Mam modalne okno dialogowe i muszę ukryć przycisk Zamknij (X), ale nie mogę go użyć ControlBox = false, ponieważ muszę zachować przyciski Minimalizuj i Maksymalizuj.

Muszę ukryć tylko przycisk Zamknij, czy jest na to sposób?

Wielkie dzięki!

Aktualizacja: Miałem pozwolenie na wyłączenie go, co jest prostsze :) Dzięki wszystkim!

stefano m
źródło
Czy to może być to, czego chcesz: [Ukryj przycisk zamykania [X] formularzy wygranych w C # .NET] ( sameeramrutia.wordpress.com/2008/09/16/... ) właśnie googlowałem:,hide close button c# drugi wynik tutaj! =)
Miguel Angelo
mylisz się, nie chcę przycisku wyłączania, ale UKRYJ go .. czy jesteś w stanie znaleźć rozwiązanie?
stefano m
8
Potrzeba to mocne słowo. Skąd pochodzi ten wymóg? Jakie jest rzeczywiste wymaganie - aby użytkownik nie mógł zakończyć programu lub że interfejs użytkownika „wygląda tak, jakby nie miał przycisku zamykania”? Ponieważ istnieją inne sposoby obejścia tego problemu i trudno będzie ci całkowicie zamknąć je wszystkie (np. Menedżer zadań, taskkill, prawdopodobnie alt + f4, itp.). Osobiście nie pracowałbym nad tym zbyt ciężko, ponieważ jeśli i tak nie zmienisz skórki całej aplikacji, będzie to zmarnowany wysiłek i złamie oczekiwania użytkownika / ciągłość z innymi programami Windows.
Merlyn Morgan-Graham
4
@ Powiedz, że ujawnia tę stronę, więc nie bądź takim krytykiem.
Brian Graham
1
Usuń również przycisk minimalizacji z listy. Zminimalizowanie okna modalnego spowoduje jego automatyczne zamknięcie. Koniecznie jest to jedyne okno, które pozostało nadal włączone. Po zminimalizowaniu nie pozostanie żadne okno, na którym można by było fokusować, więc użytkownik nie może wrócić do programu. Jesteś teraz w "czy to nadal ma sens?" terytorium. Tak nie jest.
Hans Passant

Odpowiedzi:

148

Nie możesz go ukryć, ale możesz go wyłączyć, zastępując właściwość CreateParams formularza.

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;
    }
}

Źródło: http://www.codeproject.com/KB/cs/DisableClose.aspx

Daniel A. White
źródło
dzięki, znalazłem to rozwiązanie, ale chcielibyśmy to ukryć, a nie tylko wyłączyć :( anywat dzięki!
stefano m
4
nie ma innego sposobu niż zaprojektowanie formularza od zera.
Daniel A. White
Tak. Lepiej utwórz własny formularz z własnym okienkiem kontrolnym bez przycisku zamykania, a następnie ukryj pole kontrolne formularza nadrzędnego.
Bahamut
Odpowiedź udzielona przez „Abhishek.Chopra” jest prosta i skuteczna.
Altaf Patel
Jak ponownie włączyć to w trakcie działania?
Mike de Klerk
158

Możemy ukryć przycisk zamykania w formularzu, ustawiając this.ControlBox=false;

Abhishek.Chopra
źródło
29
Czy przeczytałeś pytanie, w którym określił, że to nie jest opcja?
Serwowane
28
Wyszukałem w Google i ta SO QA była hitem. I właśnie ta odpowiedź była tym, czego szukałem. Dziękuję Abhishek ...
Abel Gaxiola
15
To ukrywa wszystkie te przyciski zmiany rozmiaru. Nie tylko X.
Rich Shealer
1
Dziękuję bardzo! Najprostszy sposób.
26

Cóż, możesz to ukryć, usuwając całe menu systemowe:

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

Oczywiście spowoduje to usunięcie przycisków minimalizacji i maksymalizacji.

Jeśli zachowasz menu systemowe, ale usuniesz element zamykający, przycisk zamykania pozostanie, ale zostanie wyłączony.

Ostatnią alternatywą jest samodzielne pomalowanie obszaru nie będącego klientem. Trudno to naprawić.

David Heffernan
źródło
4
To też działa, świetnie! Ale ControlBox = false jest łatwy w użyciu jako twój sposób.
simmeone
1
To jest to samo, co ustawienie ControlBoxna false. Ponadto nie spełnia wymagania: muszę zachować przyciski Minimalizuj i Maksymalizuj
whiteshooz
23

możesz ukryć pole zamykania za pomocą

this.ControlBox = false;

i nie zapomnij dodać spacji, this.Text = " "aby tak było

wprowadź opis obrazu tutaj

Ramgy Borja
źródło
2
To jest to, czego potrzebuję. Dzięki.
Kosmas
2
To nie jest poprawne. Bezpośrednio z pytania OP: nie mogę używaćControlBox = false
Martin
8

Jeśli naprawdę chcesz to ukryć, jak w przypadku opcji „niewidoczne”, prawdopodobnie będziesz musiał utworzyć formularz bez obramowania i samodzielnie narysować elementy podpisu. Biblioteka VisualStyles zawiera elementy Windows Elements. Musiałbyś również dodać z powrotem funkcję zmiany rozmiaru formularza lub przeniesienia formularza, chwytając pasek tytułu. Nie wspominając o menu systemowym w rogu.

W większości przypadków trudno jest usprawiedliwić brak przycisku „zamknij”, zwłaszcza jeśli potrzebujesz formularza modalnego z możliwościami minimalizowania. Minimalizowanie formy modalnej naprawdę nie ma sensu.

LarsTech
źródło
2

We właściwościach formularza ustaw „Control Box” = False, ale spowoduje to również ukrycie minimalizacji i maksymalizacji.

Muhammad Haroon
źródło
1

Możesz ukryć przycisk zamykania, zmieniając FormBorderStyle z sekcji właściwości lub programowo w konstruktorze za pomocą:

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

następnie utwórz element paska menu, aby zamknąć aplikację.

Twoje zdrowie

Josh John
źródło