C# winform 界面切换闪烁问题

问题描述

用了双缓冲减弱了闪烁效果,但有闪到界面一下的效果,很明显,求问如何解决呀。

解决方案

解决方案二:
你的绘图代码本身需要优化,比如说不属于绘图的可放在别的线程
解决方案三:
你问题的范围太大了就像别人问你为何我的电脑总是很卡一样。。。说都说不清楚是什么问题
解决方案四:
引用1楼devmiao的回复:

你的绘图代码本身需要优化,比如说不属于绘图的可放在别的线程

能具体举个例子吗?我的确是加入新图后出现这种情况,我是初学者,不太会。
解决方案五:
在窗体放个定时器Timer2(Interval设为10),执行代码如下,窗口闪烁会有明显改善publicFrmFinish(){InitializeComponent();this.SetStyle(ControlStyles.UserPaint,true);this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);//禁止擦除背景.this.SetStyle(ControlStyles.DoubleBuffer,true);//双缓冲this.Opacity=0;timer2.Start();}privatevoidtimer2_Tick(objectsender,EventArgse){for(inti=0;i<5;i++){this.Opacity+=0.2;if(i==4){timer2.Stop();}}}
解决方案六:
。。。。winform其实。。。就不适合做复杂漂亮界面(虽然我一直用他)。。。gdi性能太差。。。
解决方案七:
构造里加上这个SetStyle(ControlStyles.AllPaintingInWmPaint|ControlStyles.OptimizedDoubleBuffer|ControlStyles.ResizeRedraw|ControlStyles.UserPaint,true);
解决方案八:
引用2楼crystal_lz的回复:

你问题的范围太大了就像别人问你为何我的电脑总是很卡一样。。。说都说不清楚是什么问题

如果你使用了gid没有使用双缓冲可能会闪烁如果你界面控件一大堆也可能会闪烁界面控件上到处设置透明背景色还有parent也可能会闪烁如果你界面执行功能的代码耗时太多尤其是初始化也可能闪烁你就只说你界面会闪烁谁会知道它到底是因为什么闪烁实在是不明白为什么一提到闪烁就老爱往双缓冲上扯关系
解决方案九:
引用7楼crystal_lz的回复:

Quote: 引用2楼crystal_lz的回复:
你问题的范围太大了就像别人问你为何我的电脑总是很卡一样。。。说都说不清楚是什么问题

如果你使用了gid没有使用双缓冲可能会闪烁如果你界面控件一大堆也可能会闪烁界面控件上到处设置透明背景色还有parent也可能会闪烁如果你界面执行功能的代码耗时太多尤其是初始化也可能闪烁你就只说你界面会闪烁谁会知道它到底是因为什么闪烁实在是不明白为什么一提到闪烁就老爱往双缓冲上扯关系

~~~因为双缓冲是肯定可以解决“闪烁”(我用DirectUI),前提楼主真的是“闪烁”而不是卡。。
解决方案十:
传统的做法是界面切换,我的方法并不是这么做,Winform框架上制作者的本意估计也不是这么做。.NET可自定义控件,自定义控件也是窗体,你切换就AddControl,然后控制他的Visible属性就好了,对控件的切换绝对不会闪烁。
解决方案十一:
你再仔细看双缓冲是双缓冲窗体,并不是缓冲控件,及时你现在在Win7上不闪烁,到XP上呢?MAC呢?
解决方案十二:
无论采取什么技术手段,只要两个界面相差甚远,那么闪烁是正常的、必然的因此你需要加入动画效果,来骗过人眼的视觉残留

时间: 2024-08-18 10:43:43

C# winform 界面切换闪烁问题的相关文章

Delphi中利用INI文件实现界面无闪烁多语言切换

越来越多的程序使用了多国语言切换,虽然DELPHI自带多语言包的添加和配置,但是那种方法在切换语言时界面会出现闪烁,而且实现起来很麻烦,这里我介绍给大家的是利用INI文件来读取界面的语种文字,用这种方法,不但简单易行,而且在切换的时候不会出现界面的闪烁. 我们从一个例子出发,看看怎么实现语言的切换.首先建立一个新工程.放置如下组件: MainMenu1: TMainMenu; File1: TMenuItem; Exit1: TMenuItem; Label1: TLabel; Button1:

winform 界面 ribbon visual studio

问题描述 winform 界面 ribbon visual studio 想找一位vs高手,帮我解决这个问题,价格可以商量,我现在是编程初级,想编一个很简单的软件 主要是界面想好看一点,下了个ribbon控件,但是还是觉得界面设计不合理 解决方案 Visual Studio 无法切换到设计界面Visual Studio 单元测试之六---UI界面测试Visual Studio 单元测试之六---UI界面测试---------------------- 解决方案二: 自己找个美工,标注尺寸,切图,

Winform界面中实现通用工具栏按钮的事件处理

在一个给客户做的项目中,界面要求修改增加通用工具栏按钮的事件处理,也就是在主界面中放置几个固定的功能操作按钮,打开不同的页面的时候,实现对应页面的功能处理,这种和我标准的界面处理方式有所不同,标准的列表界面,一般在界面中放置了一些常规的按钮,如查询/更新.新建.编辑.删除.导入.导出等常规操作,现在是需要把这些提升到主界面的层次上放置按钮,这种处理方式也算是提供一种方便吧.本篇随笔介绍实现这个功能的思路和代码实现逻辑. 1.界面功能介绍 这里要实现的通用工具栏按钮的事件处理,具体的界面是这样的,

循序渐进开发WinForm项目(4)--Winform界面模块的集成使用

随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我们每天面对的太多东西了,觉得很多都稀松平常了,即使很细微的地方,可能我们都已经形成习惯了.反过来,如果我们切换到其他领域,如IOS.android,那么开始我们可能对里面很多设计的规则不甚了解,开始可能也是一头雾水. 本篇继续上一篇<循序渐进开发WinForm项目(3)--Winform界面层的项目

WinForm界面开发之“OutLookBar”工具条

在很多软件界面中,一个好的界面.方便的导航除了为软件增色不少外,也提高了用户体验,促进软件的良性发展,因为我们的软件一般需要有菜单.工具条.状态条等这些基本的东西,但是工具条本身应该是一些常用的快捷键,内容不能放置太多,否则会容易给客户凌乱的感觉.菜单条则可以分类,但是好像每次去点击,一步步深入,则显得比较麻烦.本篇我介绍一下一个很好的导航条OutlookBar控件. 在我的2个版本的送水软件中,都用到了OutLookBar的工具条,使用的界面效果如下所示.                   

WinForm界面开发之模块化分合

大千世界,合久必分,分久必合,分合之道,利之所趋. 开发过程,积少成多,聚沙成塔,模块之理,必经之路. 本文继续WInform界面开发系列的介绍,主要针对性介绍Winform开发过程中,经常用到的模块:数据字典模块.参数配置模块.权限管理模块的模块化应用,以及各模块的分合之道. 1.数据字典模块 我们知道,一般程序基本上都涉及到了一个是数据参考用途的数据字典模块,不管是Web还是Winform的,这个模块基本上是必不可少的,Winform的界面效果大致如下所示: 本模块的数据字典支持无限级树形分

Linux下图形与字符界面切换的简单方法

  1. 图形界面切换到字符界面 在图像界面下按[Alt+Crtl+F1]~[ Alt+Crtl+F6]即可切换到字符界面 2. 字符界面切换到图形界面 (1)在界面下按[ Alt+Crtl+F7]即可切换到字符界面下 (2)在命令行输入以下命令: 代码如下: # startx 3. 设定默认启动界面 系统启动默认启动界面修改可以通过修改文件/etc/inittab,将字符界面设定为默认启动界面. 在命令行下输入以下命令,打开文件/etc/inittab, 代码如下: # vi /etc/ini

聊聊常见的界面切换动画

  在使用一些移动端的App或PC端的软件的时候,我们常常会有一些界面之间切换的操作,尤其是在移动端的设备上,因为屏幕尺寸和交互方式的特性,就更多的会出现这些切换的操作,而很突然地从一个界面切换到另一个界面会给用户带来困扰,所以在触发这些操作的同时,往往需要过渡形式的动画来引导用户是如何从一个界面切换到另一个界面的,我们来看看一些常见的界面切换的过渡方式吧. 一.淡入淡出 淡入淡出的过渡效果是最为常见的处理手法,这种效果往往能很直观的表现从一个画面到另一个画面变化的过程,视觉表现上比较柔和,但同

c#winform界面listview图片列表如何实现多选按钮的批量删除

问题描述 c#winform界面listview图片列表如何实现多选按钮的批量删除 本人C#新做了一个listview自动加载图片的界面,每个加载的图片都是可以多选的,现在我想通过多选按钮实现批量删除加载的图片以及图片对应的文件里的图片,请高手指教,谢谢! 解决方案 listview的可以显示复选框listView1.CheckBoxes = true;然后遍历 foreach (ListViewItem item in listView1.Items) { if (item.Checked)