2010-05-05 6 views
2

C# .Net에서 사용자 정의 컨트롤을 만들 필요가 있습니다.이 컨트롤은 FolderBrowserDialog처럼 보이지 않게 응용 프로그램에 추가 할 수 있습니다. 제가 자주 사용하는 새로운 창입니다. 그래서 이것이 올바른 길이라고 생각합니다. 다른 대화 상자에서 알려진대로 showDialog-Method를 지정하면 창이 열립니다.C# - 보이지 않는 사용자 컨트롤 만들기

아이디어가 있으십니까? 감사와 관련,

다니엘

답변

3

단순히 falseVisible을 설정하거나이 당신을 요구하고 무엇을하지?

+1

아니요, 현재 양식에 추가 된 실제 컨트롤을 사용하지 않고도 양식 응용 프로그램에 추가 할 수있는 컨트롤이 필요합니다. 비주얼 스튜디오 윈도우의 하단에 추가 된 FolderBrowserDialog와 마찬가지로 일반 객체로 사용할 수 있지만 컨트롤은 기본적으로 폼에 추가되지 않습니다. – dhh

3

UserControl은 정의가 아니며, Form; 제 생각에 당신이 정말로 원하는 것은 Component입니다. 즉, 원하는 기능을 갖춘 새로운 Form 클래스를 실제로 만들 수는 없습니까? 표시 할 때마다 새 인스턴스를 만들고 ShowDialog으로 전화하십시오. 당신이 상태를 유지하여 부모 폼에 클래스 멤버로 인스턴스를 추가하려는 경우 확인 당신이 그것을 표시 할 때마다 그 Show 메소드를 호출, 그 FormClosing 이벤트에 이벤트 처리기를 추가 :

if (e.CloseReason == CloseReason.UserClosing) 

하고, 만약 그렇다면은,

e.Cancel = true; 
Hide(); 

(이 마지막 부분은 사용자가 양식을 닫고 다음이 배치 됐어요 후 다시 표시하려고하면 오류를 방지하는 것입니다.)

0

은 더 자세한 정보가 필요할 수 있습니다 생각 ,하지만 당신의 구식 주문 컨트롤을 .Visible 속성이 있어야합니다. 다음은 양식에서 단추를 찾을 수 있지만 사용자로부터 숨겨진 단추의 예입니다.

button.Visible = true; // shows the button 
button.Show(); // Shows the button 
button.Visible = false; // hides the button 
button.Hide(); // Hides the button 

버튼은 여전히 ​​양식/컨트롤에있을 수 있지만 사용자가 상호 작용할 수는 없습니다. 버튼에 대해 프로그래밍 방식으로 제어 할 수는 있지만 기본적으로 사용자 컨트롤이 아니라 '숨김'상태입니다. 사용자가 클릭 할 수있는 일종의 숨겨진 버튼이 있기를 원한다면 이걸 얻기 위해 다른 일을해야하지만 원하는 것이 아니어야합니다.

0

이 숨기기/보이지 않는 생각 프로세스는 고전적인 VB에서 남은 고통과 혼란과 비슷합니다. 쇼와 숨기기 등의 오래된 형태의 메소드는 혼란 스러웠고, 객체가 존재했는지 또는 보이지 않는지를 알지 못하는 위치에 개발자로서 떠났다. On Error Goto를 사용하여 Null 참조를 막는 경우 검사는 아주 간단했습니다. 따라서 나는 웹 페이지로 무언가를하고 공간과 상태를 유지할 필요가 없다면 가시성 측면에서 생각하지 말 것을 권할 것입니다.

먼저 Windows 양식을 만들고 설명하는 프로젝트 유형이라고 가정하고 프로젝트에 추가하십시오. 폼을 적절한 컨트롤로 장식하고 적용 가능한 경우 컨트롤 값에 대한 공용 액세스를 허용하는 속성을 만듭니다. "확인"또는 "취소"단추의 DialogResult 속성도 설정하십시오. Fixed3D 또는 FixedDialog 중 적절한 테두리 스타일을 지정하십시오. 어쩌면 폼을 시작 중심 부모, 가운데 화면, Windows 기본값 등에 표시 할 위치에 대한 속성을 설정할 수도 있습니다. "OK"및 "Cancel"에 대한 이벤트 핸들러는 this.Close(); 창을 닫습니다.

코드의 호출 지점에서부터 올바른 방향으로 이동할 수있는 가상 코드가 있습니다. Dialog를 호출하고자하는 장소에 다음과 같이 작성하십시오. 짧은 그래서

int intResult = 0;
string strResult = null;

MyDialogForm frm = new MyDialogForm();
frm.Title = "Select an Item";
frm.SomeProperty = 0;
frm.SomeOtherProperty = true;
if (frm.ShowDialog() == DialogResult.OK)
{
intResult = frm.Result;
strResult = frm.StringResult;
}
else if (frm.ShowDialog() == DialogResult.Cancel)
{
// User clicked the cancel button. Nothing to do except maybe display a message.
MessageBox.Show("Canceled Task");
}

...

// Somewhere further on down, but within scope, simply repeat
// what you just did, but without having to reinstantiate the
// form Window. But if you make it that far within the same
// scope, this method might be too busy and may need to be
// factored down.

:

  • 스크랩 표시/숨기기 - 그것의 안 좋은 연습.
  • 보이지 않는 양식을 사용하여 없이 양식 데이터를 저장하십시오. 그것이 수업의 일입니다.
  • UI를 많이 뒤집어야하고 창 사이에 을 앞뒤로 놓아야하는 경우 디자인에 의 원래 문제를 해결하기위한 다른 대안이 있는지 확인하십시오. 어쩌면 MVC와 같은 디자인 패턴은 응용 프로그램의 크기와 복잡성에 따라 결정됩니다.

소리가 좋아?

0

해당 컨트롤을 패널에 넣을 수 있습니다. 컨트롤을 표시하고 싶지 않을 때 panel height = 0 visible = false로 설정하십시오. 표시하고 싶을 때도 마찬가지입니다.

관련 문제