2014-02-16 4 views
0

VS 2010 (.NET 4.0)을 사용하여 개발 된 .NET Winforms 응용 프로그램과 OS가 Windows 7입니다. 솔루션에서 간단한 달력 컨트롤로 구성된 간단한 양식이 있습니다. 이 양식은 두 가지 양식의 버튼 클릭으로 호출됩니다.모달 winform이 표시되지 않습니다.

// Parent Form 
public class ParentForm : Form 
{ 
// Button click event handler is as follows: 

void btnCalendarClick(object sender, EventArgs e) 
{ 
    // ...other code 
    MyStatisClass.ShowCalendar(); 
} 
} 

//Calendar Form 
public class CalendarForm : Form 
{ 
// And the ShowCalendar method is as under.. 
public static void ShowCalendar() 
{ 
using (CalendarForm frm = new CalendarForm()) 
{ 
    if(frm.ShowDialog() == DialogResult.OK) { SelectedDate = frm.LastSelectedDate; } 
} 
} 

} 

를 지금은 설계 및 코드에서 거의 비슷 부모 양식의 두 사본을, 데 다음과 같이 버튼 클릭에 전화입니다. 그러나 버튼 클릭시 하나의 양식에서 다른 양식의 단추를 클릭 할 때 열리는 달력이 나타나지만 열리지 만 표시되지는 않습니다. 그러나 작업 표시 줄에서이를 볼 수 있으며 작업 표시 줄 자체에서 십자가를 클릭하여 아무 것도 선택하지 않고 닫아야합니다. 화면에 표시되지 않습니다. 컨트롤의 모든 탭 순서를 확인하고, BringToFront를 캘린더 폼에서 수행하고, SendToBack을 부모 폼에서 시도하고, InvokeRequired 속성을 사용하여 크로스 스레드를 확인하려고했지만 아직 폼을보고 있지 않습니다. 또한 예외가 발생하는지 확인하기 위해 가능한 모든 장소에 try catch를 넣습니다. 그러나 그것은 명중하지 않으며 실제로 모양은 다만 잘 열린다. 누락 된 것이 있으면이 양식을 보여주지 못하게 하시겠습니까? 정적 방법은 CalendarForm에 있기 때문에

감사합니다, 모두의 Bhushan

+0

게시 된 코드에서 볼 수없는 것 같습니다. 귀하의 문제는 "거의 비슷한 디자인"입니다. –

+0

한 번에 2 개의 대화 상자를 표시하려고합니까? –

답변

0

먼저 아래의 코드를 변경합니다. 나는 당신의 정적 클래스가 무엇을하는지 알지 못한다.하지만 당신은 아래처럼 직접 호출 할 수있다.

MyStatisClass.ShowCalendar(); change to below 
CalendarForm .ShowCalendar(); 

여기서 문제는 범위가 끝난 후 자동으로 개체를 처분 문을 사용하여 를 사용하고 있다는 점이다. 따라서 using 문을 제거하면 정상적으로 작동합니다.

msdn에서 "using statement"를보고 살펴 보겠습니다.

public static void ShowCalendar() 
{ 
    //using (CalendarForm frm = new CalendarForm()) 
    //{ 
    if(frm.ShowDialog() == DialogResult.OK) { SelectedDate = frm.LastSelectedDate; } 
    //} 
} 

희망이 있습니다.

+0

모달 형식을 사용하는 것은 꽤 괜찮습니다. 일반적으로 모범 사례입니다. –

+0

완전히 동의했습니다! 그러나 현재 시나리오에서는 "using"문을 사용하여 표시 할 수 없습니다. 그렇다면 디자인에 대해 확실히 재고해야합니다. – pan4321

+0

하지만 임의로 변경하지는 마십시오. –

0

나는이 문제를 해결했다. 덧붙여 말하자면 문제는 여전히 존재하지만 그 원인을 규명했습니다. 최소한 그것은 그런 식으로 보입니다. 것은, Monthcalendar 컨트롤을 보유하고있는 폼은 테두리 스타일이 없음으로 설정되어 있고 디자이너 코드에서 설정 한 몇 가지 다른 변수와 속성이 있습니다. 앞에서 언급했듯이 다른 형식으로 다른 컴퓨터에서 볼 수있었습니다 (Windows 7). 내 컴퓨터에는 윈도우 7이 있습니다. 그러나 나는 성능을 최적화하기 위해 모든 스타일을 비활성화했으며 양식을 표시 할 수 없었습니다. 방금 내 컴퓨터에서 스타일을 활성화하고 달력이 표시되었습니다. 그래서, 이것이 원인이라고 생각합니다. 그러나 이것이 원인이라면 다음 질문이 내 마음에 온 이유는 무엇입니까? 단서가있는 사람이면 누구나 공유하십시오. 감사합니다, Bhushan.

관련 문제