我在一个窗口中申明了如下几个自定义控件 private Main_MainControl main_MainControl;
private Main_IntroControl introPanel;
private Main_FlowControl main_FlowControl;
private Main_SearchControl main_SearchControl;
private Main_GetLineControl linePanel;然后我在主窗口加载函数中初始化他们
private void form_Load(object sender, EventArgs e)
{ main_MainControl = new Main_MainControl();
introPanel = new Main_IntroControl();
main_FlowControl = new Main_FlowControl();
main_SearchControl = new Main_SearchControl();
linePanel = new Main_GetLineControl();
setControlFromId(MAIN_PANEL_FLAG);
}然后我想在主窗口中通过按钮切换来加载这几个按钮
/// <summary>
/// 一级panel控制器
/// </summary>
/// <param name="iType"></param>
public void setControlFromId(int panelId)
{ //SendMessage(controlPanel.Handle, WM_SETREDRAW, 0, IntPtr.Zero);//关闭重绘
//SendMessage(controlPanel.Handle, WM_SETREDRAW, 0, IntPtr.Zero);//关闭重绘 switch(panelId)
{
case MAIN_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = MAIN_PANEL_FLAG;
controlPanel.Controls.Add(main_MainControl); main_MainControl.Controls.Add(lineButton);
main_MainControl.Controls.Add(introButton);
main_MainControl.Controls.Add(flowButton);
main_MainControl.Controls.Add(searchButton);
main_MainControl.Controls.Add(handleButton);
break;
}
case INTRO_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = INTRO_PANEL_FLAG;
controlPanel.Controls.Add(introPanel);
introPanel.Controls.Add(backButton);
introPanel.Controls.Add(buttonPanel);
zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonDown;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonUp;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonUp;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonUp;
break;
}
case FLOW_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = FLOW_PANEL_FLAG; controlPanel.Controls.Add(main_FlowControl);
main_FlowControl.Controls.Add(backButton);
main_FlowControl.Controls.Add(buttonPanel); zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonUp;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonDown;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonUp;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonUp; break;
}
case SEARCH_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = SEARCH_PANEL_FLAG;
controlPanel.Controls.Add(main_SearchControl);
main_SearchControl.Controls.Add(backButton);
main_SearchControl.Controls.Add(buttonPanel); zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonUp;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonUp;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonDown;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonUp; ; break;
}
case LINE_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = LINE_PANEL_FLAG; controlPanel.Controls.Add(linePanel);
linePanel.Controls.Add(backButton);
linePanel.Controls.Add(buttonPanel);
zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonUp;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonUp;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonUp;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonDown; break;
}
default:
{
_iControl = MAIN_PANEL_FLAG;
controlPanel.Controls.Add(introButton);
controlPanel.Controls.Add(flowButton);
controlPanel.Controls.Add(searchButton);
controlPanel.Controls.Add(handleButton);
controlPanel.Controls.Add(lineButton);
controlPanel.Controls.Add(main_MainControl);
break;
}
}
//SendMessage(controlPanel.Handle, WM_SETREDRAW, 1, IntPtr.Zero);//开启重绘
//controlPanel.Refresh();//强制刷新指定控件
}但是实现后发现 按钮切换这些panel控件的时候,界面闪烁?想请教这个问题如何解决?谢谢winform panel 切换 闪烁
private Main_IntroControl introPanel;
private Main_FlowControl main_FlowControl;
private Main_SearchControl main_SearchControl;
private Main_GetLineControl linePanel;然后我在主窗口加载函数中初始化他们
private void form_Load(object sender, EventArgs e)
{ main_MainControl = new Main_MainControl();
introPanel = new Main_IntroControl();
main_FlowControl = new Main_FlowControl();
main_SearchControl = new Main_SearchControl();
linePanel = new Main_GetLineControl();
setControlFromId(MAIN_PANEL_FLAG);
}然后我想在主窗口中通过按钮切换来加载这几个按钮
/// <summary>
/// 一级panel控制器
/// </summary>
/// <param name="iType"></param>
public void setControlFromId(int panelId)
{ //SendMessage(controlPanel.Handle, WM_SETREDRAW, 0, IntPtr.Zero);//关闭重绘
//SendMessage(controlPanel.Handle, WM_SETREDRAW, 0, IntPtr.Zero);//关闭重绘 switch(panelId)
{
case MAIN_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = MAIN_PANEL_FLAG;
controlPanel.Controls.Add(main_MainControl); main_MainControl.Controls.Add(lineButton);
main_MainControl.Controls.Add(introButton);
main_MainControl.Controls.Add(flowButton);
main_MainControl.Controls.Add(searchButton);
main_MainControl.Controls.Add(handleButton);
break;
}
case INTRO_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = INTRO_PANEL_FLAG;
controlPanel.Controls.Add(introPanel);
introPanel.Controls.Add(backButton);
introPanel.Controls.Add(buttonPanel);
zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonDown;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonUp;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonUp;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonUp;
break;
}
case FLOW_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = FLOW_PANEL_FLAG; controlPanel.Controls.Add(main_FlowControl);
main_FlowControl.Controls.Add(backButton);
main_FlowControl.Controls.Add(buttonPanel); zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonUp;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonDown;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonUp;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonUp; break;
}
case SEARCH_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = SEARCH_PANEL_FLAG;
controlPanel.Controls.Add(main_SearchControl);
main_SearchControl.Controls.Add(backButton);
main_SearchControl.Controls.Add(buttonPanel); zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonUp;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonUp;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonDown;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonUp; ; break;
}
case LINE_PANEL_FLAG:
{
this.controlPanel.Controls.Clear();
_iControl = LINE_PANEL_FLAG; controlPanel.Controls.Add(linePanel);
linePanel.Controls.Add(backButton);
linePanel.Controls.Add(buttonPanel);
zxjjButton.BackgroundImage = global::Touch.Properties.Resources.zxjsButtonUp;
lcjsButton.BackgroundImage = global::Touch.Properties.Resources.lcjsButtonUp;
ywcxButton.BackgroundImage = global::Touch.Properties.Resources.ywcxButtonUp;
ywblButton.BackgroundImage = global::Touch.Properties.Resources.ywblButtonUp;
pdqpButton.BackgroundImage = global::Touch.Properties.Resources.pdqpButtonDown; break;
}
default:
{
_iControl = MAIN_PANEL_FLAG;
controlPanel.Controls.Add(introButton);
controlPanel.Controls.Add(flowButton);
controlPanel.Controls.Add(searchButton);
controlPanel.Controls.Add(handleButton);
controlPanel.Controls.Add(lineButton);
controlPanel.Controls.Add(main_MainControl);
break;
}
}
//SendMessage(controlPanel.Handle, WM_SETREDRAW, 1, IntPtr.Zero);//开启重绘
//controlPanel.Refresh();//强制刷新指定控件
}但是实现后发现 按钮切换这些panel控件的时候,界面闪烁?想请教这个问题如何解决?谢谢winform panel 切换 闪烁
解决方案 »
- C# 中句点的疑问,请高手给我讲讲概念
- ><a 关于页面中点击上面 li跳转新页面的问题,需要隐藏gridview显示在当前页面gridview的位置,急!!!!
- 关于c#桌面应用软件开发前景
- 关于treeview的问题
- c#读取注册表出错!!!!!!!!!(所有分求解)
- 无限级分类类别搜索问题,还没有找到解决的办法
- 把DLL的复制到本地设为FALSE后又出现的问题?
- DataGrid中 Text="DataBinder.Eval(Container.DataItem,"nPhysicsType")" 我想在后台代码中用到 nPhysicsType,怎么得到?
- MVC如何自定义客户端验证的样式?
- SQL中有自动id 的列吗,以便添加纪录不重复?
- C# MP3等音乐数据流播放
- 刚学c#不久遇到项目不会做,求答案
百度到了没?没百度到就修改窗体的DoubleBuffered 属性
百度到了没?没百度到就修改窗体的DoubleBuffered 属性
效果不明显
后
controlPanel.Controls.Add(introPanel);
一定会引起闪烁的。
有个笨方法不知你可否采用:
你可以尝试用两个Panel,一个当前Panel一个缓冲Panel(不可见)
切换时:
1.向不可见的缓冲Panel上添加所需控件
2.将缓冲Panel叠加到当前Panel上
3.让缓冲Panel可见
4.让当前Panel不可见
5.清除当前Panel
6.当前Panel和缓冲Panel交换标识。如果,你的几个面板非常固定,而且组件不多,那么不如启动后就创建好5个面板,进行层次调整和可见性切换就可以了。顺便说一下,如果你想做页面切换动画,例如类似Win7控制面板侧栏的切换效果,就可以尝试这种笨方法。
高仿QQ2013通讯DEMO-10.30更新-点击下载
[精仿]360安全卫士-10.30更新(CSkin Demo)-点击下载