【发布时间】:2015-06-30 00:06:26
【问题描述】:
我有一个带有自定义控件的表单,UserControls。其中一个控件与其他控件组成:TableLayoutPanel、PictureBox(它在另一个UserControl 内)、Label。在视觉上,它们以下列方式描绘:
如图所示,红色矩形是UserControl,橙色矩形是TableLayoutPanel,黄色和绿色椅子是由PictureBox和Label组成的其他UserControl控件.
椅子(黄色和绿色)是动态绘制的。例如画黄色椅子:
private void DibujarSillasEconomicas()
{
Silla[] cheapChairs = m_avion.GetCheapChairs();
Silla silla;
byte fila_silla = 0;
byte col_silla = 0;
ControlVisualChair ctlSillaGrafica;
for(int num_silla = 0; num_silla < cheapChairs.Length; ++num_silla)
{
silla = cheapChairs[num_silla];
ctlSillaGrafica = new ControlSillaGrafica(silla);
ctlSillaGrafica.Dock = DockStyle.Fill;
ctlSillaGrafica.BackColor = Color.Black;
if (num_silla > 0 & num_silla % 6 == 0)
{
++fila_silla;
col_silla = 0;
}
tplSillasEconomicas.Controls.Add(ctlSillaGrafica, col_silla == 3? ++col_silla : col_silla, fila_silla);
++col_silla;
}
}
这些椅子和黄色的椅子画得正确。想注册乘客时出现问题:
请注意,当我添加乘客时,控件会闪烁。在代码中,当我完成添加乘客时我会执行以下操作:
this.Controls.Remove(ctlAvion); // Removes the actual UserControl (red rectangle)
ctlAvion = new ControlAvion(m_avion); // Creates a new one
ctlAvion.Location = new Point(2, 13);
ctlAvion.Size = new Size(597, 475);
this.Controls.Add(ctlAvion); // Adds the new UserControl to the main controls (a Form).
我怎样才能避免这种眨眼效果?
我尝试了以下 UserControls 方法:
ctlAvion.Invalidate();
ctlAvion.Update();
ctlAvion.Refresh();
但它们不起作用!
提前感谢您的帮助!
编辑:
@Idle_Mind 给出的答案是针对我的问题的,它解决了我重新绘制/绘制我设计的自定义控件的问题。
【问题讨论】:
-
你的 UI 有点像那架飞机,它需要 8 英里的跑道才能起飞。 Try this 快速修复。
-
这可能是你要找的东西:stackoverflow.com/questions/487661/…
-
@HansPassant,你知道我如何对 UI 的“重量”进行分析/基准测试吗?