टॉपलेवल = गलत होने पर टेक्स्ट नियंत्रण माउस से टेक्स्ट का चयन नहीं करने देता


नमस्ते!

मेरे फॉर्म में टेक्स्टबॉक्स के साथ समस्या है।

चित्र के रूप में स्क्रीनशॉट http://rghost.ru/5011999/image.png

आइए स्थिति को एक सरल उदाहरण पर दिखाएं।

1) फॉर्म1 के साथ एक नया विनफॉर्म प्रोजेक्ट बनाएं;
2) एक नया फॉर्म2 बनाएं, उस पर टेक्स्टबॉक्स नियंत्रण डालें;
3) आइए सरल कोड लिखें जो गैर-मोडल फॉर्म बनाता है;

मध्य
Form frm = new Form();
frm.StartPosition = FormStartPosition.CenterParent;
frm.TopLevel = false; // here is the problem
frm.Parent = this;
frm.Show();
frm.BringToFront();

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

हाँ, आप डबल क्लिक से पूरे टेक्स्ट का चयन कर सकते हैं, लेकिन उसके बाद आप इसे अचयनित नहीं कर सकते। इसके अलावा, क्या होगा यदि आपको इसे मिटाने के लिए पाठ का केवल एक भाग चुनने की आवश्यकता है?!

जब फॉर्म मोडल होता है तो सब कुछ ठीक काम करता है।

मेमो के लिए भी यही स्थिति है और मेरा मानना ​​है कि कुछ अन्य पाठ नियंत्रणों के लिए भी यही स्थिति है।

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

कृपया कोई सुझाव?

समाधान 3

प्रतिस्थापित करें Parent साथ MdiParent:

Form2 frm = new Form2();
frm.StartPosition = FormStartPosition.CenterParent;
frm.TopLevel = false;
frm.MdiParent = this;
frm.Show();
frm.BringToFront();

और सुनिश्चित करें कि आपका मुख्य प्रपत्र मौजूद है IsMdiContainer सत्य पर सेट करें.

—————

हमें दोष न दें क्योंकि आपने अपनी समस्या ठीक से नहीं बताई:
यदि मैं आपकी टिप्पणियों से अच्छी तरह समझ गया तो आपके पास 3 रूप हैं:
1- MainForm साथ IsMdiContainer सत्य पर सेट करें
2- ChildForm साथ MdiParent करने के लिए सेट MainForm

3- AnotherChildForm. और आप चाहते हैं कि यह एक बच्चा हो ChildForm.

यदि यह सही है, तो आप बग से छुटकारा नहीं पा सकते। बग को दूर करने के लिए ChildForm होना चाहिए दोनों MdiContainer और MdiChild जो संभव नहीं है. आपको या तो तीसरे फॉर्म का बच्चा बनाना होगा MainFormया किसी फॉर्म का उपयोग न करें (शायद a UserControl या कुछ और)।

समाधान 1

सबसे पहले, आप सेटिंग करके क्या हासिल करने की कोशिश कर रहे हैं TopLevel को false? और तुम क्यों बुला रहे हो BringToFront()? जब आप एक मॉडल रहित फॉर्म बनाते हैं, तो यह स्वचालित रूप से दिखाई देता है (इसे सामने लाया जाता है)।

दूसरा, ऐसा लगता है कि आप एमडीआई एप्लिकेशन की प्रकृति को ठीक से नहीं समझते हैं, न ही चाइल्ड विंडो और अन्य रूपों के बीच के अंतर्संबंध को।

तीसरा, यदि आप एक मॉडल रहित विंडो बना रहे हैं, तो इसे कुछ इस तरह किया जाना चाहिए:

सी#
public partial class MyForm
{
    MyModelessForm m_modelessForm = null;

    private void ShowModelessForm()
    {
        if (m_modelessForm == null)
        {
            m_modelessForm = new ModelessForm();
            // configure the form here if necessary
        }
        m_modelessForm.Show();
        m_modelessForm.BringToFront();
    }
}

समाधान 2

यह मानते हुए कि आपने संपत्ति सेट की है IsMdiContaineआर का Form1 सच है, आपका कोड इस तरह पढ़ना चाहिए:

Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();

समाधान 4

चाइल्ड फॉर्म की फॉर्मबॉर्डर स्टाइल प्रॉपर्टी को ‘कोई नहीं’ पर सेट करने का प्रयास करें

コメント

タイトルとURLをコピーしました