.NET

2009-05-20 12 views
14

में नया अधिकतम एमडीआई बाल फ़ॉर्म बनाने पर आइकन के साथ समस्या मेरे पास .NET 3.5 एमडीआई WinForms एप्लिकेशन है।.NET

मैंने एक बच्चे का फॉर्म Icon संपत्ति सेट की है, और आइकन फॉर्म के ऊपरी बाएं कोने में सही ढंग से दिखाई देता है। मैं फिर बच्चे के फॉर्म को अधिकतम करता हूं और आइकन अभी भी ठीक है।

बच्चे के फार्म के साथ अभी भी अधिकतम, मैं एक और बाल खिड़की खोलता हूं, जो स्वचालित रूप से अधिकतम हो जाता है। इस फॉर्म का आइकन Icon प्रॉपर्टी में से एक नहीं है, लेकिन डिफ़ॉल्ट .NET आइकन (नीला, लाल और पीला वर्ग वाला वाला)। हालांकि, अगर मैं एमडीआई पैरेंट फॉर्म का आकार बदलता हूं, तो आइकन स्वयं रीसेट हो जाता है और ठीक से प्रदर्शित होता है।

क्या किसी के पास कोई कामकाज है या पता है कि ऐसा क्यों होता है?

private void StatsForm_Load(object sender, EventArgs e) 
{ 
    //bug that means you have to set the desired icon again otherwise it reverts to default when child form is maximised 
    Icon = new System.Drawing.Icon("research.ico"); 
} 

इसका मतलब यह है कि आप:

+0

आप इसे खोलने के बाद बच्चे को खिड़की पर एक .refresh कर की कोशिश की है? –

उत्तर

8

सही मैं पाया है एक समाधान ...

इस के लिए वैकल्पिक हल के रूप में इस आइकन फिर से बच्चे प्रपत्र का भार ईवेंट पर सेट करने के लिए है पहले आपके वीएस प्रोजेक्ट/सोल्यूशन में प्रश्न में आइकन फ़ाइल को जोड़ना होगा और इसे "हमेशा कॉपी करें" पर सेट करना होगा ताकि आपका समाधान बनाया गया हो।

HTH Calanus

+2

एक आकर्षण की तरह काम करता है। धन्यवाद। किसी भी कारण से मैंने कभी भी आइकन रीसेट करने का प्रयास नहीं किया। यह एक एम्बेडेड संसाधन के रूप में भी काम करता है, इसलिए आपके पास अंतिम निर्देशिका में बैठे (प्रतिस्थापन योग्य) फ़ाइलों का एक टन नहीं है। –

4

मैंने पाया कि एकमात्र समाधान को निष्क्रिय और फिर एमडीआई बच्चे को फिर से सक्रिय करने के लिए किया गया था:

document.Show(); 
// Work-around for error in WinForms that causes MDI children to be loaded with the default .NET icon when opened maximised. 
ActivateMdiChild(null); 
ActivateMdiChild(document); 

यह समाधान this reply on MSDN forums में दी गई है और यह मेरे लिए काम किया।

+0

यह काम करता है, लेकिन यदि आप ShowDialog कहीं भी उपयोग करते हैं तो समस्या उत्पन्न होती है। – Drake

+0

किस तरह की समस्या है? –

+0

यदि आप अपने कोड में दिखाने के बजाए ShowDialog का उपयोग करते हैं, तो उस कॉल पर निष्पादन ब्लॉक। केवल एक बार संवाद बंद होने पर सक्रिय करने के लिए सक्रिय करें MdiChild चलाएं, लेकिन दूसरा काम नहीं करेगा क्योंकि उस बिंदु पर 'दस्तावेज़' अब मौजूद नहीं है – alldayremix

0

मेरा समाधान: MdiChild "ShowIcon" संपत्ति को सत्य पर सेट करें, 1x1 पारदर्शी आइकन असाइन करें। समस्या सुलझ गयी।

+1

शायद मुझे कुछ याद आ रहा है, लेकिन मुझे यकीन नहीं है कि यह मेरे लिए कैसे लागू होता है मूल प्रश्न समस्या यह नहीं है कि एक आइकन दिखाता है जब मैं एक नहीं चाहता, बल्कि यह कि * आइकन जो मैं दिखाना चाहता हूं * दिखाता नहीं है और इसके बजाय डिफ़ॉल्ट रूप से प्रतिस्थापित किया जाता है। –

0

इस समस्या को हल करने के लिए मैंने पाया सबसे अच्छा कामकाज here है।

aNewForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog 
AddHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged 

aNewForm.Show() 
aNewForm.WindowState = FormWindowState.Maximized 

RemoveHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged 

हैंडलर

Protected Sub Form_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) 

    If WindowState = FormWindowState.Maximized Then 
     If FormBorderStyle <> FormBorderStyle.Sizable Then FormBorderStyle = FormBorderStyle.Sizable 
    End If 

End Sub 
1
form.WindowState = FormWindowState.Normal 
form.Show() 
form.WindowState = FormWindowState.Maximized 
form.Show() 

मेरी समस्या हल!

3
private void frmChild_Shown(object sender, EventArgs e) 
{ 
    // Work-around for maximized BUG 
    this.Icon = this.MdiParent.Icon; 
    this.WindowState = FormWindowState.Normal; 
    this.WindowState = FormWindowState.Maximized; 
} 
11

Calanus 'समाधान के लिए एक मामूली संशोधन:

private void MdiBase_Load(object sender, EventArgs e) 
    { 
     // Fixes bug where loading form maximised in MDI window shows incorrect icon. 
     this.Icon = Icon.Clone() as Icon; 
    } 

यह आपको डिजाइन समय में आइकन स्थापित करने के लिए अनुमति देता है (बस के रूप में आप अन्य रूपों के लिए होगा), और किसी भी हार्ड-कोडेड की जरूरत नहीं है फ़ाइल या संसाधन का उपयोग।

2

मुझे पता चला कि इससे समस्या ठीक हो जाएगी।

myForm.WindowState = FormWindowState.Normal; 
myForm.Show(); 
myForm.WindowState = FormWindowState.Maximized; 
0

एमडीआई बच्चे पर Form_Load विधि में पहली पंक्ति के रूप में इस जोड़ना मेरे लिए काम करता है:

this.Icon = new Icon(this.Icon, this.Icon.Size);