当前位置: 首页 > 编程语言 > C#

控制台应用程序中所有窗口前的消息框?在

时间:2023-04-10 19:02:01 C#

控制台应用程序中在所有窗口前共享一个消息框?我试图在所有窗口前弹出一个消息框,以便用户看到它。我有以下代码,但它似乎把消息框放在了后面。DialogResultdlgResult=MessageBox.Show(newForm(){TopMost=true},"你想继续吗?","继续吗?",MessageBoxButtons.YesNo,MessageBoxIcon.Question);如果(dlgResult==DialogResult.Yes){Console.WriteLine("YES");}elseif(dlgResult==DialogResult.No){Console.WriteLine("NO");上面的代码在一个线程中运行这是我的问题,我该如何解决这个问题?谢谢在这种情况下,最好的选择可能是使用P/Invoke直接调用MessageBox函数。然后您可以包含MB_TOPMOST标志,这将强制它成为最顶层的消息框。(这不会在托管API中公开。)这将声明(来自pinvoke.net):[DllImport("coredll.dll",SetLastError=true)]publicstaticexternintMessageBoxW(inthWnd,Stringtext,String标题,单位类型);然后调用:MessageBoxW(0,"TopmostWindow","Helloworld",0x00000040L/*MB_ICONINFORMATION*/|0x00040000L/*MB_TOPMOST*/);是的,这是你的问题。您创建的表单将像门钉一样死去,您的线程将没有消息循环。即使你能让它工作,你仍然有一个大问题。按下用户脸上的消息框不能可靠地工作。用户将键入一个Word文档并按下空格键,就像会弹出一个消息框一样。立刻消失。用户注意到的只是文档中的一个小瑕疵和一个神秘缺失的空格。你真的应该使用NotifyIcon来弹出这样的通知。它的ShowBalloonTip方法是提供背景信息的标准方法。您可以创建自己的Form类来显示自定义内容。重要的是它不会窃取焦点以避免上述闪光问题。您需要创建一个专用线程以避免消息循环问题。像这样:publicstaticvoidShowNotification(stringmsg){vart=newThread(()=>{varfrm=newfrmNotify(msg);frm.TopMost=true;varrc=Screen.PrimaryScreen.WorkingArea;frm。StartPosition=FormStartPosition.Manual;frm.CreateControl();frm.Location=newPoint(rc.Right-frm.Width,rc.Bottom-frm.Height);Application.Run(frm);});t.SetApartmentState(ApartmentState.STA);t.IsBackground=true;t.开始();其中frmNotify为通知窗体,如下图:以上为C#学习教程:控制台应用程序中所有窗口前的消息框?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicpartialclassfrmNotify:Form{publicfrmNotify(stringmsg){InitializeComponent();frm.TopMost=true;label1.Text=味精;this.ShowWithoutActivation=true;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: