닫기 (x) 버튼 만 숨기는 방법?


151

모달 대화 상자가 있으며 닫기 (X) 버튼을 숨겨야하지만 ControlBox = false최소화 및 최대화 버튼을 유지해야하기 때문에을 사용할 수 없습니다 .

닫기 버튼 만 숨겨야합니다. 할 수있는 방법이 있습니까?

고마워요!

업데이트 : 나는 그것을 비활성화 할 수있는 권한을 가졌습니다. 더 간단합니다 :) 모두 감사합니다!


이것이 원하는 것일 수 있습니까? [C # .NET에서 Win Forms의 닫기 단추 [X] 숨기기] ( sameeramrutia.wordpress.com/2008/09/16/… ) 그냥 googled : hide close button c#, 두 번째 결과는 여기입니다! =)
Miguel Angelo

당신이 틀렸어요, 비활성화 버튼을 원하지 않지만 숨길 수 있습니다 .. 해결책을 찾을 수 있습니까?
stefano m

8
필요는 강한 단어입니다. 이 요구 사항은 어디에서 오는가? 사용자가 프로그램을 종료 할 수 없거나 UI에 "닫기 단추가없는 것"이라는 실제 요구 사항은 무엇입니까? 이 문제를 해결하는 다른 방법이 있으므로 작업 관리자, 작업 처리, alt + f4 등의 모든 방법을 완전히 종료하기가 어려울 것입니다. 어쨌든 전체 앱을 다시 스키닝하지 않으면 노력이 낭비되고 다른 Windows 프로그램과의 사용자 기대 / 연속성이 깨지기 때문에 개인적으로 너무 열심히 일하지 않을 것입니다.
Merlyn Morgan-Graham

4
@Sayem 그것은이 페이지를 보여 주므로 그렇게 비평가하지 마십시오.
Brian Graham

1
목록에서 최소화 버튼을 긁습니다. 모달 대화 상자를 최소화하면 자동으로 닫힙니다. 그래도 여전히 활성화 된 유일한 창입니다. 최소화하면 여전히 초점을 맞출 수있는 창이 없어 사용자가 프로그램으로 돌아갈 수 없습니다. 당신은 지금 "이것이 여전히 이해가 되나요?" 영토. 그렇지 않습니다.
Hans Passant

답변:


148

숨길 수는 없지만 양식의 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


덕분에, 나는이 해결책을 찾았지만, 우리는 숨길 것이, anywat 감사 :( 단지 해제하지 싶습니다!
스테파노 m

4
처음부터 양식을 디자인하는 것 외에 다른 방법은 없습니다.
Daniel A. White

네. 닫기 버튼을 사용하지 않고 자신의 컨트롤 박스로 자신의 폼을 더 잘 만든 다음 부모 폼의 컨트롤 상자를 숨기십시오.
바하무트

'Abhishek.Chopra'의 답변은 간단하고 효과적입니다.
Altaf Patel

런타임 중에 다시 활성화하는 방법은 무엇입니까?
Mike de Klerk

158

설정으로 폼에 닫기 버튼을 숨길 수있다 this.ControlBox=false;


29
그가 옵션이 아니라고 지정한 질문을 읽었습니까?
Servy

28
Google 검색을 수행 한 결과이 SO QA가 최고 인기였습니다. 그리고이 대답은 내가 찾던 것이 었습니다. 감사합니다 Abhishek ...
Abel Gaxiola

15
크기 조정 버튼을 모두 숨 깁니다. X뿐만 아니라
Rich Shealer

1
정말 고맙습니다! 가장 쉬운 방법.

26

전체 시스템 메뉴를 제거하여 숨길 수 있습니다.

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

물론 이렇게하면 최소화 및 최대화 버튼이 제거됩니다.

시스템 메뉴를 유지하면서 닫기 항목을 제거하면 닫기 단추는 남아 있지만 비활성화됩니다.

마지막 대안은 비 클라이언트 영역을 직접 페인트하는 것입니다. 제대로 이해하기가 어렵습니다.


4
이것도 잘 작동합니다! 그러나 ControlBox = false 는 당신의 방법으로 사용하기 쉽습니다.
simmeone

1
이것은 ControlBoxfalse 로 설정하는 것과 같습니다 . 또한, 그것은 요구 사항을 충족시키지 못합니다 : 최소화 및 최대화 버튼을 유지해야합니다
whiteshooz

23

당신은 사용하여 가까운 상자를 숨길 수 있습니다

this.ControlBox = false;

this.Text = " "이처럼 공백을 추가하는 것을 잊지 마십시오.

여기에 이미지 설명을 입력하십시오


2
이것이 내가 필요한 것입니다. 감사.
Kosmas

2
이것은 정확하지 않습니다. OP의 질문에서 직접 : 사용할 수 없음ControlBox = false
Martin

8

"표시되지 않음"과 같이 숨기려면 경계선없는 양식을 작성하고 캡션 구성 요소를 직접 그려야합니다. VisualStyles 라이브러리에는 사용 가능한 Windows 요소가 있습니다. 캡션 표시 줄을 잡고 양식 크기를 조정하거나 양식을 이동하는 기능을 다시 추가해야합니다. 코너에있는 시스템 메뉴는 말할 것도 없습니다.

대부분의 경우, 특히 기능을 최소화하는 모달 양식을 원할 때 "닫기"버튼을 사용할 수없는 것은 정당화하기 어렵습니다. 모달 폼을 최소화하는 것은 실제로 의미가 없습니다.


2

폼의 속성에서 'Control Box'= False로 설정되었지만 최소화 및 최대화도 숨겨집니다.


1

속성 섹션에서 또는 프로그래밍 방식으로 FormBorderStyle을 변경하여 닫기 버튼을 숨길 수 있습니다.

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

그런 다음 메뉴 스트립 항목을 만들어 응용 프로그램을 종료하십시오.

건배

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.