2013-02-17 23 views
8

मैंने एक कार्य प्रबंधन अनुप्रयोग बनाया है और मैं 2-उपयोगकर्ताओं के लिए विशिष्ट कार्य के बारे में बात करने की क्षमता को कार्यान्वित करना चाहता हूं।यह जांचने का सही तरीका है कि कोई फ़ॉर्म पहले से दिखाया गया है या नहीं?

Form1 में मेरे पास एक टाइमर है जो किसी भी नए संदेश के लिए डेटाबेस पर जांच करता है। जब एक नया संदेश मिला, तो चैट फॉर्म संदेश दिखा रहा है।

अभी तक, सब कुछ अपेक्षित काम कर रहा है लेकिन मुझे केवल एक समस्या है।

समस्या: नया संदेश के लिए पहली बार पाया एक बार, चैट विंडो दिखाई है, लेकिन जब एक और नया संदेश पाया जाता है, अन्य विंडो दिखाई देते हैं, और प्रत्येक नए संदेश के लिए मैं चैट का एक नया उदाहरण है खिड़की बनाई गई।

कोड मैं उपयोग कर रहा हूँ: frm14.ShowDialog();

मैंने देखा जब नया संदेश प्राप्त होता है, चैट विंडो (form14) है कि साथ
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(); 
        } 

} 

मैं लाइन को बदलने के लिए करने की कोशिश की दिखाया गया है, और जब एक ही उपयोगकर्ता से एक और संदेश प्राप्त होता है, तो कोई भी नई चैट विंडो नहीं दिखाई देती है, लेकिन समस्या यह है कि जब मैं चैट विंडो बंद करता हूं, तब भी जब मैं नए संदेश प्राप्त करता हूं तब भी यह प्रकट नहीं होता है।

मुझे क्या लगता है कि चैट विंडो (फॉर्म 14.Text) को उपयोगकर्ता पूर्ण नाम में बदलना है, और अगली बार जब कोई संदेश प्राप्त होता है, तो मैं जांचता हूं कि विशिष्ट विंडो पहले से ही खुली है, फिर इसे खोलें अन्यथा मैं .Show() विधि का उपयोग कर फ़ॉर्म दिखाता हूं।

क्या नया संदेश प्राप्त होने पर विंडो को प्रकट करने का यह सही तरीका नहीं है और यह अलौकिक रूप से खोला गया है? और गीलेर की जांच कैसे करें इसके पाठ (शीर्षक बार टेक्स्ट) के अनुसार एक विंडो खोला गया है?

मेरा प्रश्न पढ़ने में समय लेने के लिए धन्यवाद। किसी भी मदद की अत्यधिक सराहना की जाएगी

उत्तर

9

सबसे पहले जब आप एक नया संदेश प्राप्त करते हैं तो आप Form14 का एक नया उदाहरण बना रहे हैं।

Show बस, प्रपत्र प्रदर्शित करता है ShowDialog प्रदर्शित करता है एक मॉडल संवाद के रूप में प्रपत्र जबकि:

दूसरे Show और ShowDialog दो बहुत अलग बातें करते हैं। इसका मतलब है कि जब तक वे फॉर्म को खारिज नहीं करते हैं तब तक उपयोगकर्ता कुछ और नहीं कर सकता है।

आपको फ़ॉर्म का एक उदाहरण होना चाहिए और आप Visible संपत्ति का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि यह दिखाया गया है या नहीं।तो तुम होगा:

private Form14 frm14; 

फिर निर्माता में:

frm14 = new Form14(); 

फिर अपने कोड में:

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

आपका कोड अपेक्षित ढंग से काम कर रहा है। लेकिन क्या होगा यदि मुझे किसी अन्य उपयोगकर्ता से नया संदेश मिल रहा है, जबकि मैं पहले से किसी और के साथ चैट कर रहा हूं? –

+0

@ShikataGaNai उस मामले में आपको शायद फ़ॉर्म की एक सूची की आवश्यकता है - सिस्टम पर प्रति उपयोगकर्ता। एक फॉर्म को या तो एक शब्दकोश के साथ बदलें या शायद इसे उपयोगकर्ता के ठीक से भी बनाएं। – ChrisF

3

फॉर्म 14 को फॉर्म 1 का सदस्य बनाने का प्रयास करें। जब आपको कोई नया संदेश मिलता है तो यह जानने के लिए कि क्या यह पहले से दिख रहा है, forom14 की दृश्यमान संपत्ति की जांच करें।

संबंधित मुद्दे

 संबंधित मुद्दे