首页 新闻 赞助 找找看

C# Winfrom 如何判断鼠标在窗体上是否移动过?

0
悬赏园豆:50 [已解决问题] 解决于 2008-06-28 17:49
如题,是这样的。 <BR>我在做触摸屏。为了防止客户点了触摸屏没按返回就离开。我想让它在某一页面上只停留一分钟。一分钟过户就回到主页面。 <BR>我是这样做的,拖一个timer控件,然后声明一个全局的int变量。 <BR>interval属性设置成1000。 <BR>代码 <BR>private void timer2_Tick(object sender, EventArgs e) <BR>&nbsp; &nbsp; &nbsp; &nbsp; { <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin++; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (begin == 60) <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //Application.Exit(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.Close(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //MainForm main = new MainForm(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //main.Show(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Form3 f = new Form3(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.Show(); <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <BR>&nbsp; &nbsp; &nbsp; &nbsp; } <BR>把前一个页面关闭了,但第二个页面没show出来怎么回事? <BR>说白了我就是等时间到了60秒它就自动它关了。 <BR>然后再show一下主窗体。 <BR>能实现这个功能就不用看下面了。 <BR><BR>群里的朋友说,把当前页面的属性设为false也就是this.Visible = false; <BR>这样一来两个页面时还好使等页面多了就不行了。 <BR><BR>后来又想,先判断鼠标是不是在窗体上?如果不在,时间就停止并且不去执行timer的事件。 <BR>如果鼠标在窗体上看它是移动还是静止如果是移动就不去管它。 <BR>如果鼠标是静止就让它执行timer事件。 <BR>或许是我思路有问题,有好主意也可以提一下。 <BR>高手赐教
小也的主页 小也 | 初学一级 | 园豆:75
提问于:2008-06-21 13:57
< >
分享
最佳答案
0
先纠正楼主几个问题再回答。 1、Timer控件是个计时器。设计思路是:起初Timer控件的初始值就设为0,一旦鼠标移动就停止计时;如果在时间未到一分钟时就移动了,那么Timer控件的初始值就重新设为0,而如果计时已到一分钟,那么就打开新窗体,关闭现有窗体。 2、在WinForm中不叫页面,而叫做窗体。(是个小问题,不过容易混淆视听) 回答: 1、为何show不出来窗体,请你将代码调换,先show窗体在关闭本窗体,建议你的窗体采用MDI窗体(即父子窗体),主窗体为父,这样时间到了关闭所有子窗体就可以了,而主窗体不用也不能被关闭。 2、关于隐藏窗体建议不要使用,该关闭还需关闭,必须要释放资源,要不然只是看不见似乎并不是很好,当然你也可以根据自己的需求,在不会浪费资源的情况下,来看看是否能使用隐藏窗体的方式。 3、Timer控件有两个方法,一个是Timer1.start();一个是Timer1.stop();配合前面讲的设计思路,用在鼠标移动事件中可以控制计时的开始和停止。
刚刚 | 老鸟四级 |园豆:3151 | 2008-06-21 14:18
其他回答(3)
0
Jared.Nie | 园豆:1940 (小虾三级) | 2008-06-22 21:26
0
第一个主窗体不能Close,否则你的应用就退出了,你应用退出了,新的窗体当然就显示不出来了。所以如果你需要多次new 主窗体,你需要判断,对于第一个主窗体不能close而是hide,参考下面代码 static int m_ShowMainFormTimes = 0; private void button1_Click(object sender, EventArgs e) { if (m_ShowMainFormTimes++ == 0) { this.Hide(); } else { this.Close(); } FormMain frm = new FormMain(); frm.Show(); }
eaglet | 园豆:17139 (专家六级) | 2008-06-23 12:21
0
如果采用最简单的设计,我会让主窗体隐藏而不是关闭。并且使用Singleton Pattern或其它的方式,使所有子窗体都可以访问到主窗体。 然后,子窗体退出前,先将主窗体显示出来。如下: private void button1_click(object sender, EventArgs e) { MainForm.Instance.Visible = true; MainForm.Instance.Activate(); // 确保主窗体显示在最前面。 this.Close(); }
Colin Han | 园豆:3041 (老鸟四级) | 2008-06-23 13:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册