2013-01-01 8 views
5

मुझे खोज से खोजने में काफी मुश्किल मिली लेकिन काफी सरलता से, आप पैनल से नियंत्रण कैसे हटाते हैं? मेरे पास कुछ wxStaticText और wxTextCtrl है और मैं मौजूदा आइटम को हटाना और उन्हें नए से बदलना चाहता हूं? क्या कोई ऐसा आदेश है जिसे मैं कॉल कर सकता हूं या क्या मुझे खुद कुछ करना है? चीयर्सनियंत्रण निकालें wxwidgets

उत्तर

5

संपादित फोन के रूप ravenspoint ने कहा, बस नियंत्रण को हटाने पर्याप्त नहीं है। कुछ नियंत्रण Destroy() में अतिरिक्त सफाई करते हैं।

आप बस Destroy() नियंत्रण कर सकते हैं। WxWidgets स्वचालित रूप से इसे मूल विंडो से हटा देगा और इसकी याददाश्त मुक्त करेगा।

wxWindow* ctrl = new wxStaticText(this); 
ctrl->Destroy(); 
ctrl = new wxTextCtrl(this); 

आप नियंत्रित करने के लिए एक सूचक नहीं है, तो आप FindWindowById, FindWindowByLabel या FindWindowByName इसे प्राप्त करने के लिए उपयोग कर सकते हैं:

if(wxWindow* ctrl = wxWindow::FindWindowById(ID_MYCTRL,this)) 
    ctrl->Destroy(); 

नियंत्रण एक आकार मापक को जोड़ा गया है, तो यह हो गया है प्रतिस्थापित यह अभी भी मान्य है, जबकि:

newCtrl = new wxWindow(...); 
sizer->Replace(oldCtrl,newCtrl); // both oldCtrl and newCtrl must be valid 
oldCtrl->Destroy(); 
Layout(); // update sizer 

वैकल्पिक रूप से, आप शुरू से ही एक wxTextCtrl बना सकते हैं और यह केवल पढ़ने के लिए कर सकता है। हालांकि, इसे अतिरिक्त शैली संशोधनों की आवश्यकता होगी ताकि इसे wxStaticText (उदाहरण के लिए पृष्ठभूमि रंग, सीमा आदि) की तरह दिखाना पड़े।

+1

पॉइंटर पर आसानी से कॉल करना खतरनाक है। आप हटाए गए विंडो पर भेजे जा रहे संदेशों के साथ समाप्त हो सकते हैं। Destroy() को कॉल करना बेहतर है। – ravenspoint

+0

@ravenspoint आप सही हैं। कुछ नियंत्रण 'विनाश()' में अतिरिक्त सफाई करते हैं जो विनाशक द्वारा नहीं किया जाता है। –

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