Winform中如何让控件置顶
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Winform中如何让控件置顶相关的知识,希望对你有一定的参考价值。
我想做一个找茬的游戏,想实现一个屏幕切换的效果,就是像Win8一样的滑动翻页效果,现在我们还没学Winform的动态效果,整天就是些静态丑陋的窗体,昨天晚上突然突发奇想能不能用循环来做这个效果,然后通过Sleep()方法来设置间隔循环时间,这样会不会有移动的效果?
今天试了试虽然可以,但是弊端太多太多,第一:当指定的控件开始滑动时,整个窗体是处于无响应状态的,点什么都没反应;第二:某些位置的控件会被移动的控件挤出窗体可视范围;
下面是我的代码和效果图:
int Count = 0;
private void button10_Click(object sender, EventArgs e) if (Count > 0) return; Count += 1; int Btn_Left = this.button10.Left; for (int i = 0; i < 100; i++) Thread.Sleep(100); this.panel1.Left -= i; this.button10.Left = Btn_Left;
注:button10是那个按钮,当按钮被单击时滑动开始;
panel1是滑动体,里面包含了若干的按钮控件。
求大神帮忙解决,或者有更好的办法来实现这一效果。
是Winform的,不是WPF的,GDI重绘控件我还不会,因为目前为止学习的都还很浅,大部分时间都在学数据库的操作,没有学Winform窗体的各种效果的实现方式,当然也没有接触过GDI了。。。
有没有简单易理解的办法呢?
新手再次拜求各位大神。。。
试试在Load事件中加上这句话:
button10.BringToFront();追问这句话解决了第二个弊端,这句话是啥意思?控件置顶?应该不会。
求解答。。。。
不好意思,我以为你的弊端只是阐述一下,刚才没太在意...
关于假死状态,那是因为你的是单一线程的原因吧。
所有的操作都在主线程里完成的话需要排队,所以就假死了。
关于第一个问题的解决方案:
1.直接用Timer,Timer这个东西是一个多线程的代表,你可以尝试吧某些需要一定时间的功能单独放在一个timer里实现(比如说移动控件)2.用多线程异步的常规思路
关于BringToFront()
这个的解释我就不多说了,因为我的理解也不深入,你可以去网上查一下资料,免得我误导你。
追问没关系,那么怎样用Timer来解决这个问题呢?我在Timer这里了解的不多,就是见组长用过,只知道是按间隔一定的时间执行一次,刚才去看来百科的关于线程的简介,一头雾水,怎样运用Timer来解决那个假死的问题呢?现在没有一点头绪,求教....
追答首先,timer是一个控件..你可以直接从工具栏里面拖到窗体中,然后双击,就跳转到了timer的事件里。
个人对timer的理解:
他就像是在主程序(主线程)的基础上,有额外添加了一个小线程。本质就像是个循环,可以设置他的周期速度(每多少秒走一次timer的事件)
需要用timer1.Enable=true;来启动它
用timer1.Enable=false;来关闭它
用完了回收了
总结:你可以吧timer理解为循环能的东西,里面想些什么都可以。本回答被提问者采纳 参考技术B 第一,想解决界面假死的问题,所有对界面控件的移动操作都要放到子线程中,并且invoke,请自行搜索相关知识。
第二,button10不是被挤了,是被你的panel挡住了。
Winform在线程中怎么让MessageBox显示置顶
参考技术A 使用环境变量就行咯..... Dim xy(99) DimEnv a i=0 for 100 xy(i)=i i=i+1 next a=xy(88) BeginThread 测试 EndScript Sub 测试() MessageBox a End Sub本回答被提问者采纳以上是关于Winform中如何让控件置顶的主要内容,如果未能解决你的问题,请参考以下文章
如何让一个winform自带的控件拥有和devexpress一样的皮肤功能