2013-02-17 2 views
8

저는 작업 관리 응용 프로그램을 만들었고 2 사용자가 특정 작업에 대해 채팅 할 수있는 기능을 구현하려고했습니다.양식이 이미 표시되어 있는지 확인하는 적절한 방법은 무엇입니까?

에서 Form1 나는 새로운 메시지를 보내기 위해 데이터베이스를 확인하는 타이머가 있습니다. 새 메시지가 발견되면 채팅 양식에 메시지가 표시됩니다.

지금까지 모든 것이 예상대로 작동하지만 한 가지 문제가 있습니다.

문제 : 또 다른 새로운 메시지가 발견되면 처음 발견 새로운 메시지 한 번 는 채팅 창에 표시되지만, 또 다른 창이 나타나고, 각각의 새로운 메시지 나 채팅의 새로운 인스턴스가 창을 만들었습니다.

내가 사용하고 코드 : 나는 새 메시지가 수신 될 때, 채팅 창 (form14) 인 것으로 나타났습니다 frm14.ShowDialog();


frm14.Show(); : 나는 라인을 교체하려고

List<string> tasksToDiscuss = checkForTasksToDiscuss(fullname); 

     if (tasksToDiscuss.Count > 0) { 
// open the chat window directly minimized 
Form14 frm14 = new Form14(); 
frm14.get_from = fullname; 
frm14.get_to = tasksToDiscuss[1]; 
frm14.get_task_id = int.Parse(tasksToDiscuss[3]); 
// set message as read 
if (setMessageAsRead(tasksToDiscuss[1], fullname, int.Parse(tasksToDiscuss[3]))) 
        { 
         // now show the chat window minimized 
         frm14.Show(); 
        } 

} 

나와 같은 사용자로부터 다른 메시지를 받으면 새 대화 창이 나타나지 않지만 문제는 대화 창을 닫은 후에 새 메시지를 받더라도 더 이상 나타나지 않는다는 것입니다.

채팅 창 (Form14.Text)을 사용자 fullname으로 변경하고 다음에 메시지를받을 때 특정 창을 이미 열 었는지 확인한 다음 열지 마십시오 그렇지 않으면 .Show() 메소드를 사용하여 양식을 표시합니다.

새 메시지를 수신하고 개봉 한 경우이 창을 표시하지 않는 적절한 방법입니까? 텍스트 (제목 표시 줄 텍스트)에 따라 창이 열리는 지 확인하는 방법은 무엇입니까?

제 질문을 읽어 주셔서 감사합니다. 어떤 도움도 높이 평가 될 것입니다.

답변

9

처음에는 새 메시지가있을 때마다 Form14의 새 인스턴스를 만듭니다.

Show 그냥 양식을 표시 ShowDialog 표시 모달 대화 상자와 같은 형태 반면 :

둘째 ShowShowDialog는 두 개의 매우 다른 일을. 이는 사용자가 양식을 닫을 때까지 사용자가 다른 작업을 수행 할 수 없음을 의미합니다.

양식 인스턴스가 하나만 있어야하며 Visible 속성을 사용하여 표시 여부를 결정할 수 있습니다.그래서, 당신은 것입니다 :

private Form14 frm14; 

을 다음 생성자에서 : 다음

frm14 = new Form14(); 

을 코드에서 예상대로

if (!frm14.Visible) 
{ 
    // Add the message 
    frm14.Show(); 
} else{ 
    // Top 
    frm14.BringToFront(); 
} 
+0

귀하의 코드가 노력하고 있습니다. 그러나 이미 다른 사람과 채팅하는 동안 다른 사용자로부터 새 메시지를 받으면 어떻게해야합니까? –

+0

@ShikataGaNai이 경우에는 양식 목록 (시스템 사용자 당 하나)이 필요할 것입니다. 단일 양식을 사전으로 바꾸거나 심지어 해당 양식을 사용자가 적절하게 만들 수도 있습니다. – ChrisF

3

form14를 form1의 구성원으로 만들어보십시오. 새 메시지를 받으면 forom14의 Visible 속성을 확인하십시오. 이 이미 표시되는지 확인하십시오.

관련 문제