Question

Mon formulaire de windows contient ​DevExpress.XtraGrid.GridControl sur Form1 de façon similaire, il est également en 2e classe de l'appelé Form2.Sur Form1 je suis le chargement de données à partir de la base de données.Quand je double-cliquez sur une ligne dans la grille, il attribue à une Form2.sur Form1 gridControl1_DoubleClick événement IsHandleCreated prop est vrai (Form2 est Héritée de Form1)

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

j'ai donc créé une propriété comme sur Form1

    public GridControl GridControl1
    {
        get { return gridControl1; }

    }

mais lorsque j'appelle la méthode Display() de Form2 et vérifier la IsHandleCreated prop sur Form2 est faux.

public void Display()
    {
        if (handleCreated)
        {

        }           
    }

compléter le code ci-dessous **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)
            //{
            //}
        }
    }

Dans Form2 handleCreated il est toujours faux, je ne sais pas pourquoi?merci de m'aider

Était-ce utile?

La solution

C'est parce que votre form2 l'objet est juste que initialisé.Contrôle obtiendrez sa poignée seulement après que la fenêtre est créée, qui affiche ce contrôle.Donc, vous devez appeler form2.Show() ou form2.ShowDialog() et après que l'enregistrement pour gridControl1.IsHandleCreated.
Vous pouvez simplement tester ce comportement en utilisant ce code:

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

obj.Show();
MessageBox.Show("Shown: " + obj.handleCreated);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top