IShandleCreated опора. Всегда ложный для управления GreyView в Dev Express
-
21-12-2019 - |
Вопрос
Моя форма Windows содержит DevExpress.XtraGrid.GridControl
на Form1
Аналогичным образом, есть также 2-й класс, называемый его генеракодицетагкодом.На FORM1 я загружаю данные из базы данных.Когда я дважды щелкнул на строке сетки, он присваивает на форму2.На Form2
Form1
событие ISHANDLECTECTEDED TRUE TRUE (gridControl1_DoubleClick
унаследован от Form2
)
void gridControl1_DoubleClick(object sender, EventArgs e)
{
if (gridControl1.IsHandleCreated)
{
}
Form2 obj = new Form2();
obj.Display();
}
.
Так что я создал одно свойство, как на Form1
public GridControl GridControl1
{
get { return gridControl1; }
}
.
Но когда я вызываю дисплей () метод form2 и проверьте, как IShandleCreated Prop на Form2 является 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)
//{
//}
}
}
.
в форме2 handlecreated Его всегда ложь, я не знаю почему? Пожалуйста, помогите мне
Решение
Это потому, что ваш объект form2
только инициализируется только.Контроль получит свою ручку только после создания окна, что отображает этот элемент управления.Таким образом, вам нужно позвонить в form2.Show()
или form2.ShowDialog()
и после этого проверки на gridControl1.IsHandleCreated
.
Вы можете просто проверить это поведение, используя этот код:
Form2 obj = new Form2();
MessageBox.Show("Created: " + obj.handleCreated);
obj.Show();
MessageBox.Show("Shown: " + obj.handleCreated);
.