如何让messagebox对话框弹出后,永远在所有窗口前面呢?

zwth001 2010-08-12 01:18:02
如何让messagebox对话框弹出后,永远在所有窗口前面呢?
-----------------------------------------------------
我想做的是一个打卡提示功能,不管我现在做着什么,开着多少窗口,到了设定时间,就弹出一个 messagebox对话框,
这个对话框不能被别的窗口盖位。请问如何实现呢?加什么参数呢?

这个问题,我在vb中已经实现了,现在想用c#写,不知c#中如何实现?

再说一次,我的目的是提示,不管用户开着多少窗口,到点就弹出一个对话框提示用户“到点了,需要打卡了”
普通的 messagebox 容易被别的窗口盖住,这样就没有意义了,起不到提示的作用。
...全文
1430 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅哥加美女 2011-12-22
  • 打赏
  • 举报
回复
模态不行啊还是 会被 其他 线程创建的窗口掩盖啊
zzyzgydotnet 2010-08-14
  • 打赏
  • 举报
回复
MessageBox.ShowDialog()
flyerwing 2010-08-14
  • 打赏
  • 举报
回复
模态就好了
testmemo 2010-08-14
  • 打赏
  • 举报
回复
MessageBox.ShowDialog()

zhuyan853437 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 guyschaos 的回复:]
模态窗口啊,showdiaglog()就可以了
[/Quote]嗯
dancingbit 2010-08-13
  • 打赏
  • 举报
回复
从指定的dll(user32.dll)中导入相应的函数,如果你省略了,如何导入?
zwth001 2010-08-13
  • 打赏
  • 举报
回复
[DllImport("user32.dll", CharSet = CharSet.Auto)]
我测试已经成功了,再问一次,以上代码的作用是什么,为什么不能省去呀?
zwth001 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wenjunsu 的回复:]

据我所知:你只需使用

form1.ShowDialog(); 就是最上面了

你要用api 也可以
[/Quote]
错了,你试试就知道这样不行,实践出真知呀。
wenjunsu 2010-08-12
  • 打赏
  • 举报
回复
据我所知:你只需使用

form1.ShowDialog(); 就是最上面了

你要用api 也可以
mngzilin 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zwth001 的回复:]
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
--------------------------……
[/Quote]

这是调用API的C#申明
你需要加上命名空间:
using System.Runtime.InteropServices;
zwth001 2010-08-12
  • 打赏
  • 举报
回复
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
-----------------------------------------------
这三行代码是什么意思,是api声明吗?
mngzilin 2010-08-12
  • 打赏
  • 举报
回复
SetWindowPos(fm.Handle,-1, 200, 200, 300, 300,3);
=============
下面解释个参数意思:
fm.Handle句柄
-1 代表HWND_TOPMOST值,在所有窗口最顶端
四个200代表窗口位置可尺寸,自己可以改变,也可以设置到屏幕中央
3代表SWP_NOSIZE|SWP_NOMOVE,也就是0x01|0x02,或运算后是二进制值是11,十进制为3
mngzilin 2010-08-12
  • 打赏
  • 举报
回复
假设Form2是你要弹出的位于最顶端窗口:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
private void button1_Click(object sender, EventArgs e)
{
Form2 fm = new Form2();
SetWindowPos(fm.Handle,-1, 200, 200, 300, 300,3); fm.ShowDialog();
}
zwth001 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 amlove 的回复:]

好像是tompmost属性吧
[/Quote]
但是,打开别的窗口时,这个对话框依然会被盖住。我想实现如何不被盖住。
amlove 2010-08-12
  • 打赏
  • 举报
回复
好像是tompmost属性吧
longhair9711 2010-08-12
  • 打赏
  • 举报
回复
c#中用SetWindowPos实现

可以MSDN看看SetWindowPos怎么用
dancingbit 2010-08-12
  • 打赏
  • 举报
回复
VB那个称为“系统模式对话框”,C#并不直接支持这种模式的窗口。

可以在显示窗口之后,使用Windows API函数SetWindowPos来将窗口放置到所有其他窗口之前。
zwth001 2010-08-12
  • 打赏
  • 举报
回复
我不明白,vb6的模态窗口可以方便实现的功能,c#竟然办不到吗?
vb6的代码是:


msgbox "请打卡!",vbsystemmodal,"提示"


这样出来的提示,会永远在屏幕的最上方,就算打开一个网页,这个提示框也是放在屏幕中间的。
这是我想要的效果。
但是c#如何实现呢?
zwth002 2010-08-12
  • 打赏
  • 举报
回复
能否实现,这个窗口只在最前面,不会被别的窗口盖住呢?
比如这个窗口弹出来了,我点一下别的窗口,比如浏览器的窗口,则这个弹出窗口
就被浏览器盖住了,能不能实现,这个窗口永远在最上面?
zwth001 2010-08-12
  • 打赏
  • 举报
回复

timer1.Enabled = false;
Form2 frm = new Form2();
frm.ShowDialog();
timer1.Enabled = true;

试了,代码如上,但是这个窗口还是可以被别的窗口盖住。
加载更多回复(8)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧