2010-01-06 13 views
6

मैं कई बातें की कोशिश की है, लेकिन उनमें से कोई काम करने के लिए प्रपत्र नहीं ला सकता है ...लगातार सामने

मैं फार्म कि NotifyIcon क्लिक करने पर सभी विंडोज के सामने आना चाहिए है। तो यहाँ मैं क्या करने की कोशिश की है: अगर ब्लॉक के अंत में

 SetForegroundWindow(this.Handle); 

जोड़कर

[return: MarshalAs(UnmanagedType.Bool)] 
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] 
public static extern bool SetForegroundWindow(IntPtr hwnd); 

:

private void notifyIcon1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     this.TopMost = true; 
     this.BringToFront(); 
     this.Focus(); 
     this.TopMost = false; 
    } 
} 

तब मैं SetForegroundWindow का उपयोग करने की कोशिश की।

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

 cmsNotifyIcon.Show(); 
     cmsNotifyIcon.Close(); 

तो यह है कि यह पता चलता है और बंद कर देता है NotifyIcon संदर्भ मेनू, लेकिन यह मदद नहीं करता है:

कि मैंने शुरू में इस कोड को जोड़ने की कोशिश की है।

इस बारे में कोई विचार कैसे करें, या इसके आसपास काम करें?

उत्तर

5

यदि आप इसे माउसअप पर करते हैं तो क्या होगा?

+0

अच्छा विचार, सक्रिय() इसे ठीक नहीं कर सकता है। –

+0

मैं कोशिश कर सकता हूं, लेकिन मुझे इसमें उच्च उम्मीद नहीं है, क्योंकि माउसडाउन ईवेंट ट्रिगर किया गया है, मैं देख सकता हूं कि अगर मैं कोड में ब्रेक पॉइंट डालता हूं। वैसे भी, क्योंकि यह लगातार नहीं होता है, मुझे परीक्षण करने के लिए कुछ समय चाहिए। –

+0

मुझे लगता है कि मेरे पास दावा करने के लिए पर्याप्त अवलोकन थे कि यह मेरी समस्या का समाधान होना चाहिए। अगर किसी तरह की समस्या फिर से दिखाई देती है, तो मैं इसकी रिपोर्ट करूंगा। –

3

यहां बताया गया है कि मैंने इसे कैसे किया है। ध्यान दें कि StartupWindowState और HideWhenMinimized मेरे फ़ॉर्म के निजी सदस्य हैं।

private void OnOpenTrayMenuItemClicked(object sender, EventArgs e) { 
    if (this.WindowState == FormWindowState.Minimized) { 
     this.WindowState = this.StartupWindowState; 
     this.ShowInTaskbar = 
      (this.HideWhenMinimized && (this.WindowState == FormWindowState.Minimized)) ? false : true; 
     this.Show(); 
    } 

    this.Activate(); 
} 
+0

जैसा कि मैंने नीचे उत्तर दिया है, मुझे नहीं लगता कि यह मेरी समस्या का समाधान करता है - यह आपके आवेदन में सभी रूपों के सामने फॉर्म लाने के लिए एक कोड है, लेकिन यदि मैं सही हूं तो सभी अनुप्रयोगों के सामने नहीं है? –

+0

शायद मुझे आपकी आवश्यकताओं में कुछ याद आ रहा है। यह खिड़की को किसी भी शीर्ष खिड़कियों के सामने नहीं लाएगा जो खुले हैं (क्योंकि मैं अपने अनुप्रयोगों में 'टॉपमोस्ट' का उपयोग करने से बचता हूं)। हालांकि, जब मैं अधिसूचना आइकन पर क्लिक करता हूं, तो यह * मेरे एप्लिकेशन को सक्रिय बनाने के लिए * लगता है, और उपरोक्त कोड विंडो को सभी गैर-शीर्ष खिड़कियों के सामने लाता है, यहां तक ​​कि वे जो मेरे आवेदन का हिस्सा नहीं हैं, असफल। –

+0

मैं गलत था, मैंने समझाया कि नीचे दिए गए किसी अन्य उत्तर के लिए, एंजवे आप सही हैं कि यह काम करना चाहिए, लेकिन मुझे एक समस्या क्यों थी क्योंकि मैं माउसडाउन ईवेंट का उपयोग कर रहा था, न कि माउसअप या माउसक्लिक जैसा आपने किया था। –

1

शो() के बजाय Activate() का उपयोग करें। इसके अलावा यदि आपका फॉर्म कम हो गया है तो आपको विंडोस्टेट को विंडोस्टेट में सेट करना होगा। सामान्य (या जो भी राज्य इसे कम करने से पहले था)।

 

     private void notifyIcon1_Click(object sender, EventArgs e) 
     { 
      Activate(); 

      // this is needed for minimized form to show 
      WindowState = FormWindowState.Normal; 
     } 
 
+0

मैंने स्टार्ट + डी के साथ सभी विंडो को कम करने की कोशिश की है, नोटिफ़िकॉन पर क्लिक करें और ऐसा लगता है कि यह काम करता है (बिना किसी विंडो को पहले सामने लाए या बिना), तो मुझे लगता है कि यह समस्या नहीं है यह कोड आपके द्वारा प्रदान किया जाना चाहिए आपके पास आपके अलावा कोई अन्य एप्लिकेशन नहीं चल रहा है, लेकिन मुझे नहीं लगता कि यह सभी अनुप्रयोगों की सभी विंडो के सामने ला सकता है। –

+0

यह आपके आवेदन की खिड़की को सभी आवेदकों की अल खिड़कियों के सामने लाएगा। मैंने इसका परीक्षण किया है (विंडोज विस्टा)। –

+0

ऐसा लगता है कि माउसडाउन के बजाए माउसअप ने मेरी समस्या हल की, लेकिन मुझे लगता है कि आपका कोड सरल है, इसलिए मुझे इसका भी उपयोग करना चाहिए। मुझे यकीन नहीं है कि यह माउसडाउन पर काम करेगा या नहीं, मैं इसका परीक्षण करने की कोशिश करूंगा। –

0

मुझे एक ही समस्या थी; मेरे लिए एक साधारण कामकाज पर्याप्त है। ईवेंट हैंडलर में जहां मुझे फॉर्म दिखाने की ज़रूरत है, मैं बस यह देखने के लिए जांच करता हूं कि खिड़कियां दिखाई दे रही हैं या सामान्य हैं, और यदि यह है, तो मैं इसे कम करता हूं। शेष कोड फिर इसे वापस लाता है।

public static void BringFormToFront(Form form) { 

    form.Activate(); 
    form.TopMost = true; 
    form.TopMost = false; 
    form.Focus(); 
    form.BringToFront(); 

} 

और अगर आप अतिरिक्त आलसी होना चाहता हूँ:

private void OnDetails(object Sender, EventArgs Args) 
    { 
     if (DetailsForm == null) 
     { 
      DetailsForm = new MyForm(this); 
     } 

     if (DetailsForm.WindowState == FormWindowState.Normal) 
      DetailsForm.WindowState = FormWindowState.Minimized; 

     DetailsForm.WindowState = FormWindowState.Normal; 
     DetailsForm.Show(); 
    } 
0

इस

इस समारोह मेरे लिए काम करता प्रयास करें

public static void ShowFormToFront(Form form) { 
    form.Show(); 
    BringFormToFront(form); 
} 

ये आसानी से extension methods हो सकता है।

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