IsHandleCreated 属性dev express 中的 gridview 控件始终为 false
-
21-12-2019 - |
题
我的 Windows 窗体包含 DevExpress.XtraGrid.GridControl
在 Form1
类似的方式还有第二类称为 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 上的属性
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);
不隶属于 StackOverflow