社区
C#
帖子详情
请问在Winform中我在代码中添加控件,怎么样才能不让窗体频繁刷新?
7710703
2002-10-31 10:39:07
请问在Winform中我在代码中添加控件,怎么样才能不让窗体频繁刷新,而直到我让他刷新才全出来为止?
...全文
226
12
打赏
收藏
请问在Winform中我在代码中添加控件,怎么样才能不让窗体频繁刷新?
请问在Winform中我在代码中添加控件,怎么样才能不让窗体频繁刷新,而直到我让他刷新才全出来为止?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
7710703
2002-11-07
打赏
举报
回复
哦,那我明白了,肯定是背景刷新的结果,谢谢dy_2000_abc(芝麻开门)兄和你的Mail!
dy_2000_abc
2002-11-07
打赏
举报
回复
承蒙夸奖,谢谢。
如果你说的闪烁现象是由窗体背景刷新引起的话,你可以禁止窗体背景刷新
窗体刷新消息是WM_ERASEBKGND(0x0014)
7710703
2002-11-06
打赏
举报
回复
dy_2000_abc(芝麻开门)兄,多次的麻烦你,真的很不好意思。事实上是这样的:我从CodeProject网站上下载了一个图形菜单的控件。他的类是MenuItemEx,我的调用实际上是下面这样:
int ListLength=3;
MenuItemEx[] mm=new MenuItemEx[ListLength];
this.Menu.MenuItems[0].MenuItems[9].Clear();
for (int i=0;i<ListLength;i++)
mm[i]=new MenuItemEx((i+1).ToString());
this.Menu.MenuItems[0].MenuItems[9].MenuItems.AddRange(mm);
我刚刚用MenuItem类试了一下,他不会出现我说的问题。但是我用他的这个类就出现了这样的问题,他的类代码太多,恕我不能贴出来。但是我的意思就是想搞掉他的刷新的问题。
我刚开始说的不是很清楚,还望见谅。
dy_2000_abc(芝麻开门)兄:很敬佩你的技术和帮助他人的责任心,希望能交个朋友,可以得话请留个Mail,谢谢。
dy_2000_abc
2002-11-06
打赏
举报
回复
sorry,I can fix it up.Can you show the whole codes.
7710703
2002-11-04
打赏
举报
回复
dy_2000_abc(芝麻开门)兄:绘制菜单的时候,窗体确实没有执行OnPaint,但是当你把鼠标放上去的时候,明显得能看到整个菜单和窗体标题刷新了几次。我将这个菜单的Visible设为false也是这样,当你将这个菜单的子项清除时尤为明显。如下面的代码:
int ListLength=3;
MenuItem[] mm=new MenuItem[ListLength];
this.Menu.MenuItems[0].MenuItems[9].Clear();
for (int i=0;i<ListLength;i++)
mm[i]=new MenuItem((i+1).ToString());
this.Menu.MenuItems[0].MenuItems[9].MenuItems.AddRange(mm);
dy_2000_abc
2002-11-02
打赏
举报
回复
我执行了一下下面的代码,当菜单弹出时,窗体不执行绘制。我想你的目的是想把菜单加完后再显示,那可以先把MenuItem[i].Visible设为false,等加完后再设为true.
private void menuItem1_Popup(object sender, System.EventArgs e)
{
int ListLength=3;
MenuItem[] mm=new MenuItem[ListLength];
for (int i=0;i<ListLength;i++)
mm[i]=new MenuItem((i+1).ToString());
this.Menu.MenuItems[0].MenuItems[0].MenuItems.AddRange(mm);
}
protected override void OnPaint(PaintEventArgs e)
{
MessageBox.Show("");
base.OnPaint(e);
}
7710703
2002-11-01
打赏
举报
回复
下面的代码是用户的Popup事件触发时执行的。但是在添加的时候,窗体会刷新一次,当删除的时候也会刷新一次。所有我想让窗体在我将所有菜单加完之后再刷新。
int ListLength=3;
MenuItem[] mm=new MenuItem[ListLength];
for (int i=0;i<ListLength;i++)
mm[i]=new MenuItem((i+1).ToString());
this.Menu.MenuItems[0].MenuItems[9].MenuItems.AddRange(mm);
谢谢dy_2000_abc(芝麻开门)兄!!!
dy_2000_abc
2002-11-01
打赏
举报
回复
搞错,菜单删减或增加不会引发Form的OnControlAdded方法 :)
dy_2000_abc
2002-11-01
打赏
举报
回复
菜单删减或增加不会引发Form的OnControlAdded事件。我对你的目的不是很了解,能否把代码贴出来看看
7710703
2002-11-01
打赏
举报
回复
我的实际情况是动态的添加菜单,但是每操作一个菜单删减的时候,屏幕就会刷新一次。但是 dy_2000_abc(芝麻开门)兄我用你的办法并不好使阿?
dy_2000_abc
2002-10-31
打赏
举报
回复
上面的代码是添加完成后再刷新,你需要自己定义刷新事件的话,修改一下private void OnIdle(object s, EventArgs e) 语句。
dy_2000_abc
2002-10-31
打赏
举报
回复
bool idleHooked = false;
protected override void OnControlAdded(
ControlEventArgs e
)
{
if (!idleHooked)
{
Application.Idle += new EventHandler(OnIdle);
}
}
private void OnIdle(object s, EventArgs e)
{
Invalidate();
PerformLayout();
if (idleHooked)
{
Application.Idle -= new EventHandler(OnIdle);
}
}
Halcon
刷新
图像窗口
控件
闪烁解决方法.hdev
但是随着操作的
频繁
进行,我们在重绘窗口内容的时候,会出现并不希望出现的闪烁,比如说我希望让绘制的多个contour对象能够一次性显示,而不是每一个新的contour对象显示时,都去
刷新
一次窗口。
C#
WinForm
程序处理后台繁忙导致前台
控件
假死现象解决方法
主要介绍了C#
WinForm
程序处理后台繁忙导致前台
控件
假死现象解决方法,本文通过Application.DoEvents()解决这个问题,并讲解了Application.DoEvents()的作用,需要的朋友可以参考下
C#
WinForm
控件
随
窗体
大小改变闪屏问题
C# WinFom
控件
随
窗体
大小改变闪屏问题
winform
加载
控件
,
刷新
时延迟卡顿,屏幕一闪一闪解决方法
【
代码
】
winform
加载
控件
,
刷新
时延迟卡顿,屏幕一闪一闪解决方法。
C#
Winform
频繁
刷新
导致界面闪烁解决方法
C#
Winform
频繁
刷新
导致界面闪烁解决方法 Posted on 2014-03-31 15:11 龙心纹 阅读(5183) 评论(0) 编辑 收藏 一、通过对
窗体
和
控件
使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于...
C#
110,547
社区成员
642,561
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章