2012-11-14 14 views
5

Chcę uniemożliwić maksymalizację mojej aplikacji komputerowej. To nie powinna być maksymalizacja wszelkimi środkami - przez dwukrotne kliknięcie na pasku tytułowym lub klikając systemu Windows + strzałka w górę na klawiaturze, itp

-> wyłączyć zarówno MaximizeBox i MinimizeBox.
-> ja też ustawić MaximumSize i MinimumSize dla mojego WinForm

Nadal po naciśnięciu Windows + Up strzałkę, moja forma wygrana przesuwa się w lewym górnym rogu ekranu, to znaczy robi zmaksymalizowane . Proszę, powiedz mi, jakikolwiek sposób, aby temu zapobiec ...Zapobieganie maksymalizacji Winforma?

+3

Rozważ utworzenie drugiego pytania dotyczącego drugiego skrótu – emartel

+0

Zrobiłem to również i znalazłem to wszystko w google. Niektóre właściwości musisz ustawić na false, niektóre trzeba przesłonić. – Pavenhimself

Odpowiedz

10

W rzeczywistości są tu dwa zupełnie odrębne zagadnienia. To prawda, że ​​wyglądają zasadniczo tak samo z perspektywy funkcjonalnej, ale z perspektywy modelu implementacji (tak jak naturalnie użyłby system Windows), nie są ze sobą powiązane.

Tak, jak odpowiedzieli inni, można zapobiec maksymalizacji formy, ustawiając jej właściwość MaximizeBox na false. Spowoduje to usunięcie WS_MAXIMIZEBOX style w głównym oknie formularza, co uniemożliwi menedżerowi okien maksymalne zwiększenie okna. Wyłącza pole maksymalizacji na pasku nagłówka okna (między okienkiem minimalizującym i zamykającym), wyłącza opcję "Maksymalizuj" w menu okna/systemu i inne metody maksymalizacji okna, o którym mógłbym zapomnieć.

Jednak to nie ma nic wspólnego z klawiatury skrótu Win + , która wywołuje Aero Snap samo jak byłoby przeciągnięcie okna do magicznego pozycji sat krawędzie ekranu.Menedżer okien, czy to w wyniku błędu lub funkcji Aero Snap, nadal pozwala na efektywne "maksymalizowanie" okien, które w przeciwnym razie nie powinny być zmaksymalizowane. Ustawienie właściwości MaximizeBox nie ma na to wpływu, więc jeśli naprawdę chcesz uniemożliwić użytkownikowi zmianę rozmiaru okna w ten sposób, będziesz musiał wyłączyć efekt Aero Snap w twoim oknie.

Niestety, nie ma metody (przynajmniej nie według mojej wiedzy) na temat programowego wyłączania Aero Snap na podstawie okna lub procesu (patrz także: this related question). Jeśli użytkownik ma włączoną funkcję Aero Snap, można założyć, że chce, aby to zachowanie i aplikacje nie miały na niego wpływu. Jedyne, co możesz zrobić, to całkowicie wyłączyć zmianę rozmiaru okna. W WinForms robisz to, ustawiając właściwość FormBorderStyle na jedną z poniższych: FormBorderStyle.FixedSingle, FormBorderStyle.Fixed3D lub FormBorderStyle.FixedDialog. Jeśli nadal chcesz zmienić rozmiar okna na inne sposoby, będziesz musiał napisać kod, aby obsługiwać go ręcznie, co nie jest szczególnie łatwym zadaniem.

Dlatego zachęcam do bardzo uważnego rozważenia, czy jest to naprawdę konieczne. Wszystkie pozostałe okna, których nie można zmaksymalizować, realizują to po prostu, ustawiając właściwość MaximizeBox (lub wykonując odpowiednik w ich strukturze interfejsu użytkownika), co oznacza, że ​​nadal mogą być skutecznie zmaksymalizowane za pomocą Aero Snap. Jeśli działa to w przypadku okien innych użytkowników, w tym również tych, które są częścią samego systemu Windows, powinno to prawdopodobnie zadziałać.

+1

Natknąłem się na to, szukając podobnej odpowiedzi i ustawienie MaximizeBox na wartość false wydaje się uniemożliwiać jakąkolwiek ścieżkę maksymalizacji. Domyślam się, że to zostało naprawione od teraz i opublikowanie tej odpowiedzi. Czy też coś mi umknęło? – Karlovsky120

9

Formularz ma właściwość o nazwie MaximizeBox - ustaw tę wartość na false.

Jeśli chodzi o drugie pytanie, sprawdź numer this question and it's answers, aby uzyskać najlepsze sposoby implementacji skrótów klawiaturowych w WinForm.

+1

MaximizeBox = false nie zatrzyma skrótu Windows + Strzałka w górę, aby zmaksymalizować okno ... Jeśli się nie mylę, to znaczy, że widzę ten sam problem w mojej aplikacji .... –

+0

Zawsze można wyłączyć skrót Windows + Up a następnie skupić się na udostępnianiu każdego innego skrótu klawiaturowego. – lifetimes

+0

Powinien działać, ale tak nie jest. Zwalnianie go działa, https://stackoverflow.com/a/47994707/17034 –

1

Istnieje właściwość klasy Form o nazwie "MaximumBox", musisz ustawić False w oknie właściwości swojego formularza ... To faktycznie uniemożliwi maksymalizowanie formularza w dowolny sposób ... Również jeśli chcesz kontrolować swoje rozmiary formularzy można pracować z takimi właściwościami jak „MinimumSize, MaximumSize” ustawienie ich wartości według własnego uznania lub tworzenia programu obsługi zdarzeń dla zdarzeń MaximumSizeChanged i MinimumSizeChanged ...

+0

To nie działa, kolego .. Okno przesuwa się do lewego górnego rogu, podobnie jak przy próbie zmaksymalizowania 16-bitowego na podstawie aplikacja na 32-bitowym systemie operacyjnym Windows ... Po prostu przechodzi do lewego górnego rogu, a następnie odmawia dowolnego ruchu, na przykład kiedy maksymalizujesz dowolne okno ... Mam na myśli to, że rozmiar pozostaje taki sam, ale wszystkie pozostałe właściwości są takie same jak w przypadku maksymalizacji normalnego okna. Czy istnieje sposób na rozwiązanie tego problemu ...? –

3
this.FormBorderStyle = FormBorderStyle.FixedSingle; 

to linia kodu zapobiegnie użytkownik od zmiany rozmiaru okna.

Oprócz tego ukrywanie/dezaktywowanie pola maksymalizacji i powinno robić to, o co prosiłeś.

Aby wyłączyć pole maksymalnie wykorzystać tę

this.MaximizeBox = false; 

Aby ukryć okno maksymalnie wykorzystać to jako dobrze

this.MinimizeBox = false; 

Jeśli zmaksymalizować lub zminimalizować są ustawione na false przyciski znikają.

+0

Buddy to zrobi, ale ma niestandardowy formularz z FormBorderStyle = FormBorderStyle.None. Czy jest inny sposób na zrobienie tego ... –

+0

Można wyłączyć kombinację "WINKEY + UP", aby zapobiec maksymalizacji okna. Poza tym ustawiłbym maksymalny/minimalny rozmiar na stałą wartość.To rozwiązanie wydaje się być dość brudne, ale jeśli Twoim wymaganiem jest opcja "FormBorderStyle.None", to prawdopodobnie najlepsze ujęcie. –

1

Ustawienie MaximumSize równe rozmiarowi (lub pewnemu rozmiarowi) przynajmniej zatrzymuje przejście okna do trybu pełnoekranowego. Nadal zaskakuje do lewego górnego rogu, ale wciąż jest co najmniej oknem i wygląda na prawą - tak, jakby system Windows był głupi, a nie programem.

2

Można zapobiec okna przyciąganie do lewego górnego rogu, ustawiając:

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

w przypadku ruch postaci.

1

Możesz spróbować RegisterHotKey Win + Up, jeśli twoje okno lub aplikacja jest aktywowana i wyrejestrować ten klawisz skrótu, jeśli jest dezaktywowany. Musisz złapać klawisz skrótu i ​​zwrócić odpowiednią wartość, aby uniemożliwić dalsze przetwarzanie.

Spójrz na WM_ACTIVATEAPP, WM_ACTIVATE i WM_NCACTIVATE. Pierwszy może być użyty, jeśli chcesz wyłączyć Win + UP dla wszystkich twoich okien.