Pregunta

Mi formulario de Windows contiene ​DevExpress.XtraGrid.GridControl en Form1 De manera similar, también hay una segunda clase llamada así. Form2.En Form1 estoy cargando datos de la base de datos.Cuando hago doble clic en la fila de la cuadrícula, se asigna a un Form2.en Form1 gridControl1_DoubleClick La propiedad IsHandleCreated del evento es verdadera (Form2 se hereda de Form1)

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

así que he creado una propiedad como en Form1

    public GridControl GridControl1
    {
        get { return gridControl1; }

    }

pero cuando llamo al método Display() de Form2 y verifico que la propiedad IsHandleCreated en Form2 es falsa.

public void Display()
    {
        if (handleCreated)
        {

        }           
    }

código completo como se muestra a continuación **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)
            //{
            //}
        }
    }

En Form2 handleCreated siempre es falso. No sé por qué.por favor, ayúdame

¿Fue útil?

Solución

Esto se debe a que tu form2 El objeto solo se inicializa.El control obtendrá su identificador solo después de que se cree la ventana, que muestra este control.Entonces necesitas llamar form2.Show() o form2.ShowDialog() y después de eso verifique gridControl1.IsHandleCreated.
Simplemente puedes probar este comportamiento usando este código:

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

obj.Show();
MessageBox.Show("Shown: " + obj.handleCreated);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top