WinForm 窗体图片多,启动时卡顿、闪烁很长时间

最近某个WinForm项目中,一个窗体中放了不少按钮,都用图片作为背景,启动时发现卡顿无比,不断闪烁很长时间界面才能加载完成。

尝试拿掉图片后,就不卡了。但各种背景图片又是必须的,怎么办?

现象是界面上已经看到图片了,但还是不停闪烁,推测是设置图片之后,有其他关于界面的代码执行,导致窗体需要不断刷新重现加载。

尝试一番之后,找到了改善卡顿的办法,步骤如下:

1. 不要在设计器中设置背景图片,设计器中的按钮,就让它没有背景。

2. 在代码中为控件设置背景图片:

private void initUI(){

//Button
button1.BackgroundImage = Proj1.Properties.Resources.bgStart; 
button1.BackgroundImageLayout = ImageLayout.Stretch;
//Penel
panel.BackgroundImage = Proj1.Properties.Resources.bgLogin; 
panel.BackgroundImageLayout = ImageLayout.Stretch;
//Form
this.BackgroundImage = Proj1.Properties.Resources.bgMain1; 
this.BackgroundImageLayout = ImageLayout.Stretch;

}

3.  在窗体的load方法中进行设置背景图的操作,并且,如果有其他对于界面的操作,那么其他操作放在前面,设置图片的操作放在最后:

private void FormMain1_Load(object sender, EventArgs e)
{
     //其他界面操作    
     this.FormBorderStyle = FormBorderStyle.None;
     this.WindowState = FormWindowState.Maximized;

     //设置图片的操作
     initUI();
}

问题解决,启动速度快了很多。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
### 回答1: 在Winform中绘制一个按钮到标题栏可以通过以下步骤完成: 1. 首先,创建一个自定义的窗体类,继承自Form类。 2. 在自定义的窗体类中,重写WndProc方法。WndProc方法用于处理窗口消息,包括绘制窗口的各个部分。 3. 在重写的WndProc方法中,找到WM_NCPAINT消息,这个消息表示需要重新绘制非客户区(窗口边框、标题栏等)。 4. 在WM_NCPAINT消息的处理中,可以通过调用Win32 API中的方法绘制自定义的按钮。 5. 使用Graphics类和Rectangle类来绘制按钮的外观,可以通过Handle属性获取窗口的句柄来绘制在标题栏中。 6. 在绘制按钮时,可以通过处理鼠标消息来实现按钮的交互效果,例如点击按钮时改变按钮的颜色或状态。 7. 最后,通过设置窗体的ControlBox属性为false,来隐藏原有的窗口标题栏按钮。 通过以上步骤,我们可以在Winform中实现自定义的标题栏按钮。这样可以增加窗体的个性化和用户交互性,以满足特定应用场景的需求。 ### 回答2: 在WinForm中绘制一个按钮到标题栏可以通过以下步骤实现: 1. 首先,在WinForm窗体的构造函数中添加以下代码: ``` // 设置窗体样式为可绘制标题栏 this.FormBorderStyle = FormBorderStyle.FixedSingle; this.ControlBox = false; ``` 2. 在窗体的`WndProc`方法中重写窗口消息的处理方式,以便实现自定义控件的绘制: ``` protected override void WndProc(ref Message m) { base.WndProc(ref m); const int WM_NCPAINT = 0x85; // 非客户区重绘消息 if (m.Msg == WM_NCPAINT) { IntPtr hDC = GetWindowDC(m.HWnd); if (hDC != IntPtr.Zero) { Graphics g = Graphics.FromHdc(hDC); // 绘制按钮的图标或背景 // ... ReleaseDC(m.HWnd, hDC); } } } ``` 3. 在绘制代码中使用`Graphics`对象的绘图方法来绘制按钮的图标或背景,可以使用`DrawRectangle`、`DrawImage`等方法来绘制按钮的样式。 4. 最后,在窗体的其他事件处理方法中,如点击事件或鼠标移动事件中,可以对按钮进行相应的操作。 通过以上步骤,我们可以实现在WinForm的标题栏中绘制一个按钮,来实现自定义的交互效果。请注意,以上代码仅为示例,具体的绘制逻辑和样式可以根据实际需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹰信息技术服务部

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值