손으로 만든 소품.데브 익스프레스에서 그리드 뷰 컨트롤에 대해 항상 거짓입니다.
-
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);
제휴하지 않습니다 StackOverflow