打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c# this.topmost不工作

我是C#的新手,仍然试图让我的头脑(在一些非常耐心的朋友的帮助下)。

我在将新窗体的TopMost属性设置为true时遇到问题。我有两个(几乎)相同的形式; 1工作正常,而工作正常。

两个表单都将TopMost属性设置为true

  • Form1显示窗口,当我尝试在其后面单击时,表单闪烁几次并发出一声窗口发出哔声。
  • Form2也会显示表单,但当我在其后面单击时,表单会变灰(或失去焦点),我可以在主表单上单击。

我已经搜索了这个问题的答案,并找到了一个答案,建议将this.TopMost = true;放在表单的加载事件中,但这不起作用。

我唯一可能改变或者可能没有影响的是Form1是在属性中设置.NET 4.5创建的,在创建Form2之前,我将其更改为.NET 3.5(客户端配置文件)。我已经尝试过将其更改回来,但它没有帮助。在我再次删除并创建Form2之前,有没有人有任何想法?

非常感谢提前。 (如果您需要更多信息,请告诉我们)

6 个答案:

答案 0 :(得分:13)

TopMost是一个属性,用于确保一个窗口始终显示在应用程序中的所有其他窗口之上。微软的例子是一个查找和替换工具。

您发现的差异是通过使用ShowDialog将Form1创建为模式对话框。显示对话框确保必须先关闭表单,然后才能再次使用应用程序中的所有其他窗口。例如;使用表单获取用户数据以进入父表单数据库。

当您不介意用户是否已完成对话时,使用

Show,例如允许您的用户有机会使用一些辅助功能(例如计时器,秒表)程序的功能。

在使用不同的.Net框架时,我能想到的唯一视觉差异是不同的窗口对话框,例如OpenFileDialog,已在整个框架中更新

答案 1 :(得分:6)

它可能对你有帮助;

frm.TopLevel = true;
frm.TopMost = true;

答案 2 :(得分:3)

微软的这个链接确认可能是Windows 7和Windows Server 2008 R2中的一个Bug我在Windows 7嵌入式系统中遇到过这个问题,所提供的补丁修复了这个问题所以请考虑一下:)

http://support.microsoft.com/kb/2587473/en-us

希望有所帮助!

答案 3 :(得分:1)

大锤方式做到了! 100%工作!

public static class User32
{
    public const int SW_HIDE = 0;
    public const int SW_SHOW = 5;
    public const int SW_SHOWNORMAL = 1;
    public const int SW_SHOWMAXIMIZED = 3;
    public const int SW_RESTORE = 9;

    [DllImport("user32.dll")]
    public static extern bool SetForegroundWindow(IntPtr hWnd);
    [DllImport("user32.dll")]
    public static extern bool AllowSetForegroundWindow(uint dwProcessId);
    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}

User32.AllowSetForegroundWindow((uint)Process.GetCurrentProcess().Id);
User32.SetForegroundWindow(Handle);
User32.ShowWindow(Handle, User32.SW_SHOWNORMAL);

答案 4 :(得分:-1)

我在解决方案中遇到了类似的问题。在使用重载的Show-function之后,它起作用了:

frm.TopLevel = true;
frm.TopMost = true;
frm.Show(this)

答案 5 :(得分:-1)

已显示事件中添加以下代码:

this.TopMost = true;
this.Focus();
this.TopMost = true;
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ExtJS表单提交与加载全攻略
全速下载-用ASP动态生成JavaScript的表单验证代码
如何用VB制作一个屏幕保护程序
vb中向另一个窗体传递参数
WinForm中 变Enter键为Tab键 实现焦点转移
Devperience 12.1 ribbonForm窗体里显示其他窗体
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服