2010-04-05 11 views
9

मैं उपयोगकर्ता नियंत्रण लिख रहा हूं। आकार बदलने पर मैं उपयोगकर्ता नियंत्रण को आकर्षित करना चाहता हूं। मैं विंडोज़ फॉर्म के "ResizeEnd" के बराबर कोई भी ईवेंट नहीं ढूंढ पा रहा हूं।"ResizeEnd" उपयोगकर्ता नियंत्रण के लिए समतुल्य

क्या उपयोगकर्ता नियंत्रण के लिए कोई समकक्ष घटना है?

कृपया ध्यान दें कि इस मामले में उपयोगकर्ता नियंत्रण का मूल नियंत्रण स्वयं उपयोगकर्ता नियंत्रण है, इसलिए मैं इसे (मूल उपयोगकर्ता नियंत्रण) को किसी रूप में परिवर्तित नहीं कर सकता। चूंकि मैं एक ढांचे का उपयोग कर रहा हूं, मैं उस फॉर्म तक नहीं पहुंच सकता जिस पर यह उपयोगकर्ता नियंत्रण प्रदर्शित होगा।

+0

क्या आपने अपनी समस्या का समाधान किया? अगर जवाब हाँ है, तो कैसे? मुझे एक ही समस्या है और एक संभावित समाधान पोस्ट किया [यहां] (http://stackoverflow.com/questions/7584307/user-control-resize) – Marco

उत्तर

7

कोई समकक्ष नहीं है। एक फॉर्म में एक मोडल साइजिंग लूप होता है, जब उपयोगकर्ता किनारे या फॉर्म के कोने पर क्लिक करता है। बाल नियंत्रण को इस तरह से आकार में नहीं बदला जा सकता है, यह केवल अपनी आकार की संपत्ति में परिवर्तन देखता है।

अपने उपयोगकर्ता नियंत्रण में आकार बदलने वाली संपत्ति जोड़कर इसे हल करें। फ़ॉर्म इसे आसानी से अपने ऑनरिजइजबिन/एंड() ओवरराइड से असाइन कर सकता है। फार्म पाते हैं कि आप जब तक यूसी के लोड घटना में जनक संपत्ति के बाद भी संभव है:

public bool Resizing { get; set; } 

private void UserControl1_Load(object sender, EventArgs e) { 
    if (!this.DesignMode) { 
    var parent = this.Parent; 
    while (!(parent is Form)) parent = parent.Parent; 
    var form = parent as Form; 
    form.ResizeBegin += (s, ea) => this.Resizing = true; 
    form.ResizeEnd += (s, ea) => this.Resizing = false; 
    } 
} 
+0

मामले में मूल रूप से उपयोगकर्ता का नियंत्रण भी हो सकता है। तो मैं अभिभावक नियंत्रण को एक रूप में नहीं डाल सकता। – Ram

+0

@ राम: यही कारण है कि जबकि लूप वहां है। क्या तुमने कोशिश की? –

+0

@ हंस पासेंट: यह पोस्ट मुझे मेरे पोस्ट [यहां] के बाद दिया गया था (http://stackoverflow.com/questions/7584307/user-control-resize)। समस्या यह है कि (आपके उत्तर का उपयोग करके) माता-पिता चक्र के दौरान शून्य हो जाते हैं और सब कुछ विफल हो जाता है। यहां तक ​​कि 'this.FindForm()' का उपयोग करके मुझे शून्य मिलती है। क्या आपके पास एक और विचार है? – Marco

1

हंस समाधान काम कर रहा है (और ऐसा लगता है कि यह यह करने के लिए एक ही रास्ता है), लेकिन यह है कि इन संचालकों की आवश्यकता है हर रूप में, जो आपके नियंत्रण का उपयोग कर रहा है (जो हमेशा स्वीकार्य नहीं है)।

तो, आप आकार बदलने पर टाइमर शुरू करने, सरल वर्कअराउंड का उपयोग कर सकते हैं। हर बार आकार बदल जाएगा आपका टाइमर पुनरारंभ होगा। और केवल तभी जब कुछ समय के लिए कोई आकार परिवर्तन नहीं होगा (_timer.Interval) यह ResizeFinished() विधि का आह्वान करेगा।

private Timer _timer; 

    public MyControl() 
    { 
     _timer = new Timer(); 
     _timer.Interval = 500; 
     _timer.Tick += (sender, e) => ResizeFinished(); 
    } 

    protected override void OnSizeChanged(EventArgs e) 
    { 
     base.OnSizeChanged(e); 
     _timer.Start(); 
    } 

    private void ResizeFinished() 
    { 
     _timer.Stop(); 
     // Your code 
    } 

जैसा कि आप देख सकते हैं, अंतिम कोड बदलने के बाद 500 एमएस के बाद ही आपका कोड लागू किया जाएगा।

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