c# winform程序,判断是不是打开同一个窗口的问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# winform程序,判断是不是打开同一个窗口的问题。相关的知识,希望对你有一定的参考价值。
我有两个菜单是打开同一个窗口,我如何判断当我点击一个菜单打开一个窗口后,再点击任何一个菜单,都不会再打开同一个窗体,只是焦点默认到当前窗体。
参考技术A 最简单的办法是,在当前主页面给个全局性变量如public bool status=true;然后点按钮show()窗体的时候,改变这个值,然后在打开的子窗体关闭时在把值还原就行了
如:
if(status)
??.show(this);
status=false;
在子窗口的FormClosing事件中
父窗体 f=(父窗体)this.Owner;
f.status=true; 参考技术B 很简单,定义一个类变量,每次单击按钮判断它的状态就可以了。
private Form f;
Button1_Click
ShowWindow();
Button2_Click()
ShowWindow();
private void ShowWindow()
if(f==null)
f = new Form();
else
f.Activate();
本回答被提问者采纳 参考技术C 判断是否存在,存在就直接active激活就行。 参考技术D 书上原来有个例子的 不过忘了代码。
winform中如何判断多久没有对窗体进行操作了?
现在要做的就是任意一个Winform窗体3分钟以上没有任何操作,就弹出一个窗体,类似于电脑屏保,有N张图片来回的切换。
有几个方法。1. GetLastInputInfo,缺点:只能监测本进程的窗口,不能知道其他进程的情况。本窗口没有输入,不代表用户就没有输入~
2. 捕获WM_SYSCOMMAND-->SC_SCREENSAVE。这是个取巧的方法,先设置系统屏保时间为你指定的时间,然后等待该消息。缺点是系统只向顶层激活窗口发送该消息。就是说如果你不是顶层窗口、不是激活状态,系统就不给你发这个消息~
3. 低级键鼠钩子。缺点:没有明显的缺点,但是任何程序关闭窗口的时候会比正常慢一点点~
可能还有别的方法,赶着看青奥会,有空再帮你想吧~ 参考技术A Form 有个 Deactivate 事件,可以在其中开始计时三分钟。 参考技术B 调用系统api:
getlastinputinfo
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public uint dwTime;
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
static long GetLastInputTime()
LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO();
vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);
if (!GetLastInputInfo(ref vLastInputInfo)) return 0;
return Environment.TickCount - (long)vLastInputInfo.dwTime;
private void Form1_Load(object sender, EventArgs e)
timer1.Enabled = true;
private void timer1_Tick(object sender, EventArgs e)
Text = string.Format("用户已经0秒没有路过了", GetLastInputTime() / 1000);
具体参考:
http://hi.baidu.com/xuejianxiyang/item/d82a94e514cad40e64db0012本回答被提问者采纳
以上是关于c# winform程序,判断是不是打开同一个窗口的问题。的主要内容,如果未能解决你的问题,请参考以下文章