किसी एप्लिकेशन में, मुझे एकाधिक पॉपअप खोलने की आवश्यकता है लेकिन यह जांचने की आवश्यकता है कि किसी दिए गए संदर्भ (गाइड) के साथ पॉपअप पहले से मौजूद है या नहीं। यदि ऐसा है, तो मैं पहले मौजूदा पॉपअप को बंद कर दूंगा और एक नया खोलूंगा। मैं नीचे दिए गए कोड का उपयोग कर रहा हूं लेकिन ऐसा लगता है कि जब भी कोई नया पॉपअप बनाया जाता है तो मेरा आंशिक वर्ग चर ग्रिड रीसेट हो जाता है और इसलिए MRwin.GetGuid() == this.guid की स्थिति हमेशा सत्य होती है। यह ऐसा है जैसे कि guid चर को स्थिर घोषित किया गया था :-S कोई विचार?
public partial class MyPopup: MetroWindow
{
private Guid guid;
public Guid GetGuid()
{
return guid;
}
public MyPopup(Guid guid)
{
InitializeComponent();
this.guid = guid;
foreach(var win in Application.Current.Windows)
{
if (win is Forms.MyPopup)
{
Forms.MyPopup cWin = (Forms.MyPopup) win;
// Close if there is any open popup window related to the same Guid
if (cWin.GetGuid() == this.guid)
{
cWin.Close();
}
}
}
}
}
2 जवाब
अंत में, Application.Current.Windows में निश्चित रूप से थ्रेडिंग के कारण खुली हुई खिड़कियों में से एक शामिल नहीं था। इस मुद्दे को हल करने के लिए मैंने एक स्थिर सूची का उपयोग करके खुली खिड़कियों की सूची बनाने और बनाए रखने का निर्णय लिया।
यह कंस्ट्रक्टर के लिए एक बुरा काम है। यदि आपको विंडो बनाने की आवश्यकता नहीं है, तो इसे न बनाएं। इसे बनाना और फिर बंद करना उचित नहीं है। और यह आपकी समस्या का कारण बनता है, क्योंकि आपकी नई बनाई गई आंशिक रूप से विंडो पहले से ही Application.Current.Windows
सूची में है!
कंस्ट्रक्टर में इस तरह के लॉजिक होने के बजाय, एक स्टैटिक मेथड (या फ़ैक्टरी) का उपयोग करें:
public static MyPopup OpenPopup(Guid guid) =>
Application.Current.Windows
.OfType<Forms.MyPopup>()
.FirstOrDefault(w => w.GetGuid() == guid)
?? new MyPopup(guid);
(यदि आप किसी मौजूदा पॉपअप का संदर्भ नहीं देना चाहते हैं तो बेझिझक null
लौटाएं)।
Application.Current.Windows
वर्तमान थ्रेड पर बनाई गई सभी विंडो का ट्रैक रखता है।
Application.Current.MainWindow
बन जाती है, इसलिए पहली विंडो हमेशा थोड़ी खास होती है।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।
string
मान को एकGuid
चर में निर्दिष्ट करने का प्रयास कर रहे हैं। पठनीयता के लिए, मैं यह भी अनुशंसा करता हूं कि आप अपने कोड को प्रारूपित करें - कम से कम स्टैक ओवरफ़्लो पर - अधिक पारंपरिक सी # तरीके से। (मैंGetGuid
विधि के बजाय किसी संपत्ति का उपयोग करने का भी सुझाव दूंगा...)