IShandleCreated опора. Всегда ложный для управления GreyView в Dev Express

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Моя форма Windows содержит ​DevExpress.XtraGrid.GridControl на Form1 Аналогичным образом, есть также 2-й класс, называемый его генеракодицетагкодом.На FORM1 я загружаю данные из базы данных.Когда я дважды щелкнул на строке сетки, он присваивает на форму2.На Form2 Form1 событие ISHANDLECTECTEDED TRUE TRUE (gridControl1_DoubleClick унаследован от Form2)

    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 Prop на Form2 является false.

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)
            //{
            //}
        }
    }
.

в форме2 handlecreated Его всегда ложь, я не знаю почему? Пожалуйста, помогите мне

Это было полезно?

Решение

Это потому, что ваш объект 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