#c# #winforms #visual-studio-2015 #mdi
#c# #winforms #visual-studio-2015 #mdi
Вопрос:
У меня есть форма MDI с древовидным изображением слева, а форма отображается справа с разделителем в левую сторону. Я хочу открыть форму на основе щелчка пользователя по узлу в treeview, как мне это сделать правильно. Проблема в том, что когда я открываю новую форму, на экране появляется случайная форма на миллисекунду, а затем она исчезает, а та, которая должна появиться, отображается сразу после. Вот мой код на данный момент:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
CloseAllMdiChildForms();
if (e.Node.Name == "root")
{
CustomerFrm cf = new CustomerFrm();
cf.Show();
cf.MdiParent = this;
}
//treeView1.MouseClick();
//if (treeView1.SelectedNode.Level == 0)
//{
// CustomerFrm CF = new CustomerFrm();
// CF.ShowDialog();
//}
}
На экране без причины появляется случайная форма, видимая только в течение миллисекунды. В чем проблема?
Комментарии:
1. В чем проблема?
2. На экране без причины появляется случайная форма, видимая только в течение миллисекунды.
3. Это потому, что вы сначала показываете форму, а затем устанавливаете ее
MdiParent
. Поэтому он мерцает; он отображается за пределами области mdi, а затем, после установки его родительского элемента mdi, он отображается в клиентской области mdi. Чтобы решить проблему, достаточно сначала установитьcf.MdiParent = this;
, а затем вызватьcf.MdiParent = this;
.4. Кстати, я исправил свою опечатку в ответе: сначала установите
cf.MdiParent = this;
, а затем вызовитеcf.Show();
.
Ответ №1:
Мерцание происходит потому, что вы сначала показываете форму, а затем устанавливаете ее MdiParent
. Таким образом, он мерцает; он отображается за пределами области mdi, а затем после его настройки MdiParent
отображается в клиентской области mdi.
Чтобы решить проблему, достаточно сначала установить cf.MdiParent = this;
, а затем вызвать cf.Show();
.
Ответ №2:
На основе прокомментированного кода искомое событие называется NodeMouseClick .
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Name == "root")
{
CustomerFrm childForm = new CustomerFrm();
childForm.MdiParent = this;
childForm.Show();
}
}