2012-11-14 3 views
5

데스크톱 응용 프로그램이 최대화되지 않도록하고 싶습니다. 그것은 어떤 방법으로 극대화 될 안 - 두 번 클릭하여 제목 표시 줄, 또는 키보드에서 Windows + 위쪽 화살표를 클릭하여 등

-> 내가 해제 MaximizeBoxMinimizeBox 모두.
은 -> 나는 또한 나의 승리 양식 내가 그것을 최대화됩니다 의미, 화면 왼쪽 상단으로 이동 내가 윈도우 + 위쪽 화살표를 누르면

아직 내의 WinForm의 MAXIMUMSIZEMinimumSize 설정 . 이 문제가 발생하는 것을 막을 수있는 방법을 알려주십시오.Winform이 최대화되는 것을 방지 하시겠습니까?

+3

바로 가기에 관한 두 번째 질문에 대한 또 다른 질문을 만드는 것을 고려하십시오. – emartel

+0

나는 이것을 수행했으며 Google에서이 모든 것을 발견했습니다. 일부 속성을 false로 설정해야하며 일부 속성은 재정의해야합니다. – Pavenhimself

답변

10

실제로 여기서는 완전히 다른 두 가지 문제가 있습니다. 물론 기능적 관점에서는 기본적으로 같지만 구현 모델 측면에서는 (Windows 자체가 자연스럽게 사용하는 것처럼) 관련이 없습니다.

다른 사람들이 대답 했으므로 MaximizeBox 속성을 false으로 설정하여 양식이 최대화되는 것을 방지 할 수 있습니다. 이렇게하면 양식의 기본 창에서 WS_MAXIMIZEBOX style이 제거되므로 창 관리자가 창을 최대화하지 못하게됩니다. 창 캡션 표시 줄 (최소화 상자와 닫기 상자 사이의 상자)의 최대화 상자를 비활성화하고 창/시스템 메뉴의 "최대화"옵션을 비활성화하고 잊어 버린 창을 최대화하는 다른 방법을 비활성화합니다.

그러나, 이것은 마법의 위치로 창을 드래그 화면의 가장자리를 앉아 것과 같은 Aero Snap를 호출 승리 + 키보드 바로 가기, 함께 할 수 없다.창 관리자는 버그 또는 Aero Snap의 기능으로 인해 최대화되지 않아야하는 창을 효과적으로 "최대화"할 수 있습니다. MaximizeBox 속성을 설정해도 영향을 미치지 않으므로 사용자가이 방법으로 창 크기를 변경하지 못하게하려면 창에서 Aero Snap의 효과를 비활성화해야합니다.

아쉽게도 Windows 나 프로세스별로 Aero Snap을 프로그래밍 방식으로 사용 불가능하게 설정하는 방법은 없습니다 (적어도 내 지식은 아님) (this related question 참조). 사용자가 에어로 스냅을 사용하도록 설정 한 경우, 사용자는 해당 동작을 원한다고 추측 할 수 있으며 응용 프로그램은이를 조작하지 않아야합니다. 당신이 할 수있는 유일한 일은 윈도우 크기 조정을 완전히 불가능하게하는 것입니다. WinForms에서 , FormBorderStyle.Fixed3D 또는 FormBorderStyle.FixedDialog 중 하나의 값으로 FormBorderStyle 속성을 설정하면됩니다. 여전히 다른 방식으로 창 크기를 조정하려면 수동으로 처리하는 코드를 작성해야합니다. 특히 쉬운 작업은 아닙니다.

이렇게 나는 이것이 정말로 필요한지 매우 신중히 고려하는 것이 좋습니다. 다른 모든 비 최대화 가능 윈도우는 MaximizeBox 속성을 설정하거나 UI 프레임 워크에서 동등한 작업을 수행하여이 작업을 수행하므로 Aero Snap을 통해 효과적으로 최대화 할 수 있습니다. 이 기능이 Windows의 일부인 윈도우를 포함하여 다른 모든 윈도우에서도 작동한다면 아마 잘 작동 할 것입니다.

+1

나는 이와 비슷한 대답을 찾고 MaximizeBox를 false로 설정하면 어떤 극대화 경로를 막는 것처럼 보였다. 나는 이것이 지금과이 대답의 게시 사이에서 고쳤다 고 생각한다. 또는 나는 무엇인가 놓쳤 느냐? – Karlovsky120

9

양식에 MaximizeBox이라는 속성이 있습니다 (false로 설정).

두 번째 질문과 관련하여 WinForms에서 키보드 바로 가기를 구현하는 가장 좋은 방법은 this question and it's answers을 확인하십시오.

+1

MaximizeBox = false는 모든 창을 최대화하기 위해 Windows + 위쪽 화살표 바로 가기를 중지하지 않습니다 ... 내가 잘못하지 않으면 coz m이 내 응용 프로그램에서 같은 문제에 직면합니다 ... –

+0

항상 Windows + 바로 가기를 사용하지 않도록 설정할 수 있습니다 또한 다른 모든 키보드 바로 가기를 사용할 수있게 만드는 데 집중하십시오. – lifetimes

+0

작동해야하지만 작동하지 않아야합니다. 그것을 해머로 작동 시키면, https://stackoverflow.com/a/47994707/17034 –

1

양식의 속성 창에서 "MaximumBox"라는 False를 설정해야하는 Form 클래스의 속성이 있습니다 ... 이것은 실제로 양식이 어떤 식 으로든 최대화되는 것을 비활성화합니다 ... 또한 원하는 경우 당신이 코드 줄은 방지 할 수 있습니다 ...

+0

이 일은 버디를 작동시키지 못합니다 .. 16 비트 DOS를 최대화하려고 할 때와 마찬가지로 창이 왼쪽 상단으로 이동합니다. 귀하의 32 비트 Windows OS에서 응용 프로그램 ... 그냥 왼쪽 위 모서리에 가서 어떤 창을 최대화 할 때처럼 움직임을 거부합니다 ... 크기는 같지만 다른 모든 속성은 동일합니다. 정상적인 창이 최대화 될 때처럼 .. 이 문제를 해결할 수있는 새로운 방법이 있습니까? –

3
this.FormBorderStyle = FormBorderStyle.FixedSingle; 

"MinimumSize, MAXIMUMSIZE"당신의 재량에 따라 그 값을 설정하거나 MaximumSizeChanged 및 MinimumSizeChanged 이벤트에 대한 이벤트 처리기를 만드는 등의 특성으로 작업 할 수 폼의 크기를 제어 할 수 사용자가 윈도우의 크기를 재조정하지 못하게합니다.

이외에도 최대화 상자를 숨기거나 비활성화하면 요청한 내용을 따라야합니다.

은 최대화 상자가 최대화 상자가

this.MinimizeBox = false; 

최대화하는 경우뿐만 아니라이를 사용하고 버튼이 사라 false로 설정되어 최소화 숨기려면이

this.MaximizeBox = false; 

를 사용하지 않으려면.

+0

버디이 작업을 수행 할 수 있지만 FormBorderStyle = FormBorderStyle.None 인 사용자 지정 양식이 있습니다. 이 작업을 수행 할 다른 방법이 있습니까? –

+0

창을 최대화하지 못하도록 'WINKEY + UP'조합을 억제 할 수 있습니다. 그 외에도 최대/최소 크기를 고정 값으로 설정합니다.이 솔루션은 상당히 더러운 것처럼 보일 수 있지만 요구 사항이 'FormBorderStyle.None'-option 인 경우 아마 가장 좋습니다. –

1

최소 크기 (또는 일부 크기)와 동일한 최대 크기를 설정하면 창을 전체 화면으로 전환하지 않습니다. 여전히 왼쪽 상단 모서리에 스냅되어 있지만, 적어도 여전히 윈도우이고 모양이 옳습니다. Windows가 프로그램 대신에 어리 석다는 것입니다.

2

당신은 설정하여 왼쪽 상단 모서리에 스냅 창을 방지 할 수 있습니다 :

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

을 형태의 이동 이벤트.

1

귀하의 창이나 응용 프로그램이 활성화되어있는 경우, 핫키를 등록하려고 시도 할 수 있습니다.이 단축키가 비활성화 된 경우 등록 해제하십시오. 핫키를 잡아서 추가 처리를 방지하려면 적절한 값을 반환해야합니다.

WM_ACTIVATEAPP, WM_ACTIVATEWM_NCACTIVATE을 찾으십시오. 모든 창에 대해 Win + UP을 사용하지 않으려면 첫 번째 옵션을 사용할 수 있습니다.

관련 문제