2012-02-16 2 views
0

나는 3 개의 경우를 가진 combobox가있다. case "0"은 "유효한 선택이 아님"이라는 대화 상자를 엽니 다. 대문자 "1"과 대문자 "2"가 열리면 별도의 양식이 있습니다. (FormMain 및 Form3)한 번에 하나의 Windows 양식 만 표시하려면 어떻게합니까?

Form3이 열려있는 경우 어떻게해야합니까? FormMain을 열 수 없습니다. 그렇게 말한 메시지 상자가 나타납니다. 나는 단지 "숨기기"기능을 원하지 않는다. 나는 이미 그 세트를 가지고있다.

몇 가지 다른 것들을 시도했지만 어느 것도 효과가 없었습니다. 그리고 나는 formload와 콤보 박스의 선택된 색인에서 그들을 시도했다.

어떤 제안이라도?

답변

1

현재 표시된 양식의 인스턴스를 유지할 수있는 일종의 정적 클래스를 구현할 수 있습니다. 표시하기 전에 각 양식에서이 정적 클래스를 확인하십시오.

어쩌면 이런 것 같습니다.

public static classs FormManager 
{ 

    private static Form currentForm=null; 
    public static Form CurrentForm 
    { 
     get 
     { 
      return currentForm; 
     } 
     set 
     { 
      this.currentForm=value; 
      if (this.currentForm!=null) 
       currentForm.Disposed+=(s,e)=>{FormManager.currentForm=null;}; 
     } 
    } 
} 

//at each form 

. 
. 
. 
public void TryShowForm() 
{ 
    if (FormManager.CurrentForm==null) 
     FormManager.CurrentForm=this; 
    this.Show(); 
} 
2

질문을 올바르게 이해하면이 문제에 대한 해결 방법이 올바른지 알 것입니다.

현재 선택한 하위 양식을 표시하는 데 Form.Show method을 사용하고 있습니다. 대신 Form.ShowDialog method으로 바꿉니다. 코드는 동일하게 보이지만 ShowDialog 메서드는 폼을 모달 대화 상자로 표시합니다. 즉, 사용자가 응용 프로그램의 다른 폼과 상호 작용하기 전에 폼을 닫아야 함을 의미합니다.

또한 "0"이 실제로 "유효하지 않은 선택"인 경우 해당 옵션을 콤보 상자에서 완전히 제거하는 것이 좋습니다.

+0

나는 이미 이것을 가지고 있으며 내 다음 최고의 솔루션이 될 것입니다. 하지만 내 양식에는 일시 중지 기능이있어 사용자가 탐색하여 프로그램의 다른 부분을 사용할 수도 있습니다. 다른 양식이 열려 있고 그 반대의 경우에도 액세스 할 수있는 양식은 하나만 있습니다. 그렇게 말하는 메시지 상자가 있습니다. 나는 메시지 상자 부분을 알고 있지만 다른 부분은 알고있다. 사용자가 클릭하면 그래서 내가 다른 사람과 그들을 유효하고 선택하지 표시하는 메시지를 원했다 "하나는 선택"그들은 하나 옵션 1 옵션 2 을 선택 를 참조 드롭 다운 목록 안타 그렇게 할 때 – james

+0

경우 "0"입니다. 그래서 내가 물어 봐도 될까요,이게 유해할까요? 그것은 위대하고 필요에 따라 작동합니다. 그렇다면 프로그래밍에 새로운 것이므로 해를 이해하지 못합니다. 귀하의 답변에 감사드립니다. – james

+0

@james : 흠, "일시 중지"할 수있는 양식이있는 것은 이상합니다. 나도 디자인을 상상할 수 없거나 사용자가 부러워서 어려울 것입니다. 일반적인 사용자는 개발자가 가지고있는 앱에 대해 동일한 정신 모델을 가지고 있지 않다는 것을 이해해야합니다. 그리고 구현 방법을 알아내는 데 어려움을 겪고 있기 때문에 다른 Windows 응용 프로그램이 그런 식으로 작동하지 않는다는 힌트를 제공해야합니다. 따라서 응용 프로그램이 사용자의 기대에 어긋나지 않을 것이며 이는 결코 좋은 일이 아닙니다. –

1

Form3 및 FormMain dim 문을 모듈에서 공용으로 만들 수 있습니다. 현재 실행되고있는 것을 볼 수있는 테스트를 수행 할 때, 당신은 형태가 사용이 사용자가 폼을 닫을 때, 당신은 아무것도에 해당 변수를 설정한다고 가정

Public newFrm3 as Form3 
Public newFrmMain as FormMain 

'blah blah blah 
If IsNothing(Form3) then 
    'form is closed, create new 
    newFrm3 = new Form3 
    newFrm3.Show 
Else 
    'form is currently running, display message etc to alert user. 
End If 

현재 있는지 확인할 수 있습니다.

+0

이것은 내가 dim와 함께 public을 대체하게하고 어떤 이유로 든 formmain을 받아들이지 만 경고없이 에러없이 디버깅하게한다. 그러나 의도 된 것을하지 않습니다. 나는 메인 폼로드에 코딩을 넣었다. (formmain가 아니라 form). 그 맞습니까? – james

+0

는 선택 케이스 ComboBox2.SelectedIndex 케이스 0 Flashwindow (Me.Handle 1) Dialog1.Show() 사례 1 Flashwindow (Me.Handle 1) FormMain.Show() Dialog1를 ComboBox2.SelectedIndexChanged .Hide() My.Computer.Audio.Stop() 그렇지 Form3.CanSelect = 거짓 케이스 만약 Form3.CanSelect = 그런 거짓 MessageBox.Show ("NO") 최종면 최종 선택 – james

+0

나는 그 일을 시도했지만 didnt 일을 마치해야만한다. – james

관련 문제