我正在为应用程序创建一个界面。背景都是1x1像素。在设计时,界面非常慢(visual studio 2012)。移动组件是超级滞后的。如果我运行应用程序,则加载接口大约需要10秒钟。
可以隐藏界面的某些部分。他们再次可见,他们需要时间来逐步建立/加载。
如何改善这一点并使界面更加平滑/加载更快?
源代码:
namespace WindowsFormsApplication1
{
public partial class MapTool : Form
{
public int Pin_Berekenen = 0;
public int pin_Settings = 0;
public MapTool()
{
InitializeComponent();
BlackSetupUI();
panel_Berekenen.Visible = false;
panel_settings.Visible = false;
}
void BlackSetupUI()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Selectable, false);
pictureBox_RouteBerekenen.BackColor = Color.Transparent;
panel_Berekenen.BackColor = Color.Transparent;
pictureBox_settings.BackColor = Color.Transparent;
button_pin_berekenen.FlatAppearance.BorderSize = 0;
button_Berekenen.FlatAppearance.BorderSize = 0;
label_berekening1.Parent = pictureBox_bar;
label_berekening1.BackColor = Color.Transparent;
label_Berekening2.Parent = pictureBox_bar;
label_Berekening2.BackColor = Color.Transparent;
label_verschil.Parent = pictureBox_bar;
label_verschil.BackColor = Color.Transparent;
button_pin_settings.FlatAppearance.BorderSize = 0;
label_RouterBerekenen.Parent = pictureBox_bar;
label_Settings.Parent = pictureBox_bar;
pictureBox_settings.Parent = pictureBox_bar;
pictureBox_RouteBerekenen.Parent = pictureBox_bar;
pictureBox_innectis.Parent = pictureBox_bar;
label_innectis.Parent = pictureBox_bar;
}
void WhiteSetupUI()
{
}
private void MapTool_MouseClick(object sender, MouseEventArgs e)
{
if (Pin_Berekenen == 0)
{
panel_Berekenen.Visible = false;
}
else
{
return;
}
if (pin_Settings == 0)
{
panel_settings.Visible = false;
}
else
{
return;
}
}
private void button_pin_berekenen_Click(object sender, EventArgs e)
{
switch (Pin_Berekenen)
{
case 0:
Pin_Berekenen = 1;
button_pin_berekenen.Image = Properties.Resources.Pinned;
break;
case 1:
Pin_Berekenen = 0;
button_pin_berekenen.Image = Properties.Resources.Pin;
break;
default:
break;
}
}
private void button_pin_settings_Click(object sender, EventArgs e)
{
switch (pin_Settings)
{
case 0:
pin_Settings = 1;
button_pin_settings.Image = Properties.Resources.Pinned;
break;
case 1:
pin_Settings = 0;
button_pin_settings.Image = Properties.Resources.Pin;
break;
default:
break;
}
}
private void pictureBox_settings_MouseHover_1(object sender, EventArgs e)
{
panel_settings.Visible = true;
}
private void pictureBox_RouteBerekenen_MouseHover_1(object sender, EventArgs e)
{
panel_Berekenen.Visible = true;
}
}
}
我只是设计界面,你可以看到这个应用程序中没有加载数据。
答案 0 :(得分:0)
很难说出你的界面到底在做什么。但这里有一些一般的提示:
您可以在显示启动画面(有或没有进度)的同时预加载,然后执行所有耗时的工作(例如,构建所有表单,解析所有配置,缓存图形等) )。或者甚至将主应用程序放入dll中,并使用唯一的启动画面使exe文件变小。
您可以优化父/子控件重绘和布局操作(BeginUpdate
/ EndUpdate
等),这样您就可以通过调用不必要的绘制操作来浪费时间,直到它是正确的时间因为它发生了。您可以使用双缓冲,WS_EX_COMPOSITED。
如果您需要进行大量计算,那么可能必须进行虚拟化(显示“快速占位符”并在计算后用实际数据替换它们)或缓存
您可以使用众多技巧之一来更快地模拟(用户可以感觉到)操作:在屏幕上显示一小部分数据,同时在内存中准备更大部分数据(某种虚拟窗口) ,添加一些智能结论和缓存(如果用户向左移动,那么也许他想继续这样,从左侧预加载更多数据,或者如果用户向右移动100像素,也许他会想要返回,所以不要卸载那些数据)。
也许你必须掌握大量数据,然后优化甚至使用C ++在单独的dll中编写速度要求的部分。
或许您应该重新设计UI,将常用部分拆分为控件,将嵌套内容放入用户控件等等。