손으로 만든 소품.데브 익스프레스에서 그리드 뷰 컨트롤에 대해 항상 거짓입니다.

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

  •  21-12-2019
  •  | 
  •  

문제

내 윈도우 양식에 포함 ​DevExpress.XtraGrid.GridControl 시작 Form1 비슷한 방식으로 2 등급도 이렇게 불립니다. Form2.양식 1 에서 데이터베이스에서 데이터를로드하고 있습니다.그리드 행을 두 번 클릭하면 양식 2 에 할당됩니다.시작 Form1 gridControl1_DoubleClick 이벤트 처리 된 소품은 사실입니다(Form2 에서 상속됩니다 Form1)

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

그래서 나는 양식 1 과 같은 하나의 속성을 만들었습니다

    public GridControl GridControl1
    {
        get { return gridControl1; }

    }

그러나 양식 2 의 표시()메소드를 호출하고 양식 2 에서 처리 된 소품을 확인할 때 거짓입니다.

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 에서 항상 거짓으로 만들어 졌는데 왜 그런지 모르겠어요?제발 도와주세요

도움이 되었습니까?

해결책

이 때문에 당신의 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