دعامة IsHandleCreated.دائمًا ما يكون خطأ للتحكم في عرض الشبكة في dev Express

StackOverflow https://stackoverflow.com//questions/25055351

  •  21-12-2019
  •  | 
  •  

سؤال

يحتوي نموذج windows الخاص بي على ​DevExpress.XtraGrid.GridControl على Form1 بطريقة مماثلة هناك أيضًا فئة ثانية يطلق عليها اسم Form2.في Form1 أقوم بتحميل البيانات من قاعدة البيانات.عندما أنقر نقرًا مزدوجًا على صف الشبكة، يتم تعيينه إلى Form2.على Form1 gridControl1_DoubleClick الحدث IsHandleCreated الخاصية صحيح (Form2 ورثت من Form1)

    void gridControl1_DoubleClick(object sender, EventArgs e)
    {
        if (gridControl1.IsHandleCreated)
        {
        }
        Form2 obj = new Form2();
        obj.Display();
    }

لذلك قمت بإنشاء خاصية واحدة مثل Form1

    public GridControl GridControl1
    {
        get { return gridControl1; }

    }

ولكن عندما أقوم باستدعاء طريقة العرض () الخاصة بـ Form2 والتحقق من أن خاصية IsHandleCreated في Form2 خاطئة.

public void Display()
    {
        if (handleCreated)
        {

        }           
    }

رمز كامل على النحو التالي **Form1**

public partial class Form1 : Form
    {

        public GridControl GridControl1
        {
            get { return gridControl1; }

        }

        public bool handleCreated
        {
            get { return gridControl1.IsHandleCreated; }
        }

        public Form1()
        {
            InitializeComponent();
            gridControl1.DataSource = CreateTable(20);
            gridControl1.DoubleClick += gridControl1_DoubleClick;

        }

        void gridControl1_DoubleClick(object sender, EventArgs e)
        {
            if (gridControl1.IsHandleCreated)
            {
            }
            Form2 obj = new Form2();
            obj.Display();
        }


        private DataTable CreateTable(int rowCount)
        {
            DataTable table = new DataTable();
            table.Columns.Add("String", typeof(string));
            table.Columns.Add("Int", typeof(int));
            table.Columns.Add("Date", typeof(DateTime));
            for (var i = 0; i < rowCount; i++)
            {
                table.Rows.Add(string.Format("Row {0}", i), i, DateTime.Today.AddDays(i));
            }
            return table;
        }
}

**Form2**
public class Form2 : Form1
    {
        public Form2()
        {
        }
        public void Display()
        {
            if (handleCreated)
            {

            }
            //Form1 obj = new Form1();

            //if (obj.handleCreated)
            //{
            //}
        }
    }

في HandleCreated Form2، يكون الخطأ دائمًا لا أعرف لماذا؟الرجاء مساعدتي

هل كانت مفيدة؟

المحلول

هذا لأن الخاص بك form2 تتم تهيئة الكائن فقط.سيحصل عنصر التحكم على مقبضه فقط بعد إنشاء النافذة، التي تعرض عنصر التحكم هذا.لذلك، تحتاج إلى الاتصال form2.Show() أو form2.ShowDialog() وبعد ذلك تحقق من ذلك gridControl1.IsHandleCreated.
يمكنك ببساطة اختبار هذا السلوك باستخدام هذا الكود:

Form2 obj = new Form2();
MessageBox.Show("Created: " + obj.handleCreated);

obj.Show();
MessageBox.Show("Shown: " + obj.handleCreated);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top