2011-09-04 27 views
98

Mam modalne okno dialogowe i muszę ukryć przycisk Zamknij (X), ale nie mogę użyć ControlBox = false, ponieważ muszę zachować przyciski Minimalizuj i Maksymalizuj.Windows Forms: Jak ukryć przycisk Close (x)?

Potrzebuję ukryć przycisk Zamknij, czy jest jakikolwiek sposób to zrobić?

Wielkie dzięki!

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

+0

jesteś źle, nie chcę przycisk Wyłącz, ale ukryj czy jesteś w stanie znaleźć rozwiązanie? –

+8

Potrzeba jest mocnym słowem. Skąd pochodzi to wymaganie?Jaki jest faktyczny wymóg - czy użytkownik nie może zakończyć programu, czy też interfejs użytkownika "wygląda tak, jakby nie miał przycisku zamknięcia"? Ponieważ istnieją inne sposoby obejścia tego problemu i trudno będzie ci całkowicie je zamknąć (np. Menedżer zadań, taskkill, ewentualnie alt + f4, itp.). Osobiście nie pracowałem nad tym zbyt ciężko, ponieważ, o ile nie zrestrukturyzujesz całej aplikacji, będzie to zmarnowany wysiłek i przerwać oczekiwanie użytkownika/ciągłość z innymi programami Windows. –

+4

@Semem to ujawnia tę stronę, więc nie bądź takim krytykiem. –

Odpowiedz

110

Nie można tego ukryć, ale można 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

+0

dziękuję, znalazłem to rozwiązanie, ale chcielibyśmy je ukryć, nie tylko wyłączyć :(anywat dzięki! –

+3

nie ma innego sposobu niż zaprojektowanie formularza od zera –

+0

tak, lepiej zrób własny formularz ze swoim własnym controlbox bez przycisku zamykania, a następnie ukryj pole kontrolne formularza nadrzędnego – Bahamut

25

Cóż, można go ukryć, usuwając całe menu systemowego:

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

Oczywiście, ten sposób usuwa minimalizacji i maksymalizacji przycisków.

Jeśli zachowasz menu systemowe, ale usuniesz zamknięty element, przycisk zamykania pozostanie, ale zostanie wyłączony.

Ostateczną opcją jest pomalowanie obszaru bez obsługi klienta. Ciężko to naprawić.

+1

To też działa, gr jeść! Ale * ControlBox = false * jest łatwy w użyciu na twojej drodze. – simmeone

+0

Jest to to samo, co ustawienie "ControlBox" na false. Ponadto nie spełnia wymagania: _ Muszę zachować przyciski Minimalizuj i Maksymalizuj_ – whiteshooz

7

Jeśli naprawdę chcesz to ukryć, tak jak w "niewidocznym", prawdopodobnie będziesz musiał utworzyć formularz bez obramowania i sam narysować komponenty napisów. Biblioteka VisualStyles ma dostępne elementy systemu Windows. Będziesz musiał również dodać funkcję ponownego zmieniania kształtu lub przesuwania formularza, chwytając pasek napisów. Nie wspominając o menu systemowym w rogu.

W większości przypadków trudno jest uzasadnić, że przycisk "zamknij" nie jest dostępny, szczególnie gdy chce się uzyskać formę modalną z ograniczeniem możliwości. Minimalizowanie formy modalnej naprawdę nie ma sensu.

106

Możemy ukryć zamykacz na formularzu poprzez ustawienie this.ControlBox=false;

+23

Czy przeczytałeś pytanie, w którym określił, że nie było to możliwe? – Servy

+21

Czy wyszukiwanie w Google i to SO SOA było największym hitem. I ta odpowiedź była tym, czego szukałem. Dziękuję Abhishek ... –

+11

Ukrywa wszystkie te przyciski wielkości. Nie tylko X. –

1

We właściwościach formularza jest ustawiona „Kontrola Box” = False ale będzie to ukryć Minimalizacja i maksymalizacja również.

2

Cóż można ukryć zamykacz zmieniając FormBorderStyle z sekcji Właściwości lub programowo w konstruktorze przy użyciu:

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

następnie utworzyć element paska menu, aby zamknąć aplikację.

okrzyki

0

jeśli jest to opcja można ustawić

this.FormBorderStyle = FormBorderStyle.None; 

następnie odtworzyć minimalizowania i maksymalizowania przycisków

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

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.WindowState = FormWindowState.Minimized; 
    } 
Powiązane problemy