IsHandleCreated プロパティdev Express の Gridview コントロールでは常に false です

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

  •  21-12-2019
  •  | 
  •  

質問

私のWindowsフォームには次のものが含まれています ​DevExpress.XtraGrid.GridControl の上 Form1 同様に、次のように呼ばれる 2 番目のクラスもあります。 Form2. 。Form1 ではデータベースからデータをロードしています。グリッド行をダブルクリックすると、Form2 に割り当てられます。の上 Form1 gridControl1_DoubleClick イベント IsHandleCreated プロパティは true (Form2 から継承されます Form1)

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

Form1 のようなプロパティを 1 つ作成しました

    public GridControl GridControl1
    {
        get { return gridControl1; }

    }

しかし、Form2 の Display() メソッドを呼び出して、Form2 の IsHandleCreated プロパティが 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)
            //{
            //}
        }
    }

Form2 では handleCreated は常に false ですが、なぜですか?私を助けてください

役に立ちましたか?

解決

これはあなたのせいです 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