IsHandleCreated Prop.é sempre falso para controle gridview no dev express
-
21-12-2019 - |
Pergunta
Meu formulário do Windows contém DevExpress.XtraGrid.GridControl
sobre Form1
de maneira semelhante, também existe a 2ª classe chamada de Form2
.No Form1 estou carregando dados do banco de dados.Quando clico duas vezes na linha da grade, ela é atribuída a um Form2.sobre Form1
gridControl1_DoubleClick
a propriedade IsHandleCreated do evento é verdadeira (Form2
é herdado de Form1
)
void gridControl1_DoubleClick(object sender, EventArgs e)
{
if (gridControl1.IsHandleCreated)
{
}
Form2 obj = new Form2();
obj.Display();
}
então criei uma propriedade como no Form1
public GridControl GridControl1
{
get { return gridControl1; }
}
mas quando eu chamo o método Display() do Form2 e verifico se a propriedade IsHandleCreated no Form2 é falsa.
public void Display()
{
if (handleCreated)
{
}
}
código completo conforme abaixo **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)
//{
//}
}
}
No Form2 handleCreated é sempre falso, não sei por quê?por favor me ajude
Solução
Isso ocorre porque seu form2
o objeto é apenas inicializado.O controle receberá seu identificador somente após a criação da janela, que exibe esse controle.Então você precisa ligar form2.Show()
ou form2.ShowDialog()
e depois disso verifique gridControl1.IsHandleCreated
.
Você pode simplesmente testar esse comportamento usando este código:
Form2 obj = new Form2();
MessageBox.Show("Created: " + obj.handleCreated);
obj.Show();
MessageBox.Show("Shown: " + obj.handleCreated);