C#将非模态窗体置顶显示方法

news2024/10/6 10:32:48

Winform 窗口有一个属性:TopMost,表示该窗体是否始终显示在此属性未设置为 true 的所有其他窗体之上;

我的理解就是,如果一个 Winform 项目有多个窗体,其中有一个窗体的 TopMost 属性设为 true 了,而其他窗体的 TopMost 未设置为 true,那么 TopMost 属性为 true 的窗体就会显示在其他窗体之上;

前几天项目上遇到一个问题:我明明设置了窗体的 TopMost 属性为 true,还是无法显示在最上层;

后来经过反复测试,发现一个情况:如果我只在窗体属性栏上设置 TopMost 为 true,窗体无法置顶显示:

如果没有把窗体属性栏上的 TopMost 设置为 true(默认为 false),而是在窗体的 Load 事件中用代码指定 TopMost=true,也无法置顶显示:

但是,当我同时在窗体属性栏上设置 TopMost 为 true,也在 load 事件里用代码指定 TopMost=true,就可以将窗体置顶显示。

但是,后来我再用这种方式置顶窗体,发现又不灵了。

在网上查了各种资料,我自己也测试了各种情况,最后发现,当我把窗体的 ShowInTaskbar 属性设置为 false,又可以置顶了。

也就是把 ShowInTaskbar 属性设置为 false,把 TopMost 属性设置为 true,也在 load 方法里用代码指定 TopMost=true,三个条件一起满足的情况下,窗体又可以置顶了。

在网上还查到另一种使用系统动态库的方法置顶窗体(不用把 ShowInTaskbar 属性设置为 false):

把窗体的 TopMost 属性设置为 true,同时在代码里加如下内容:

// 设置此窗体为活动窗体:

// 将创建指定窗口的线程带到前台并激活该窗口。键盘输入直接指向窗口,并为用户更改各种视觉提示。

// 系统为创建前台窗口的线程分配的优先级略高于其他线程。

[DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]

public static extern bool SetForegroundWindow(IntPtr hWnd);

// 设置此窗体为活动窗体:

// 激活窗口。窗口必须附加到调用线程的消息队列。

[DllImport("user32.dll", EntryPoint = "SetActiveWindow")]

public static extern IntPtr SetActiveWindow(IntPtr hWnd);

// 设置窗体位置

[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 Form2_Load(object sender, EventArgs e)

{

// 设置窗体显示在最上层

SetWindowPos(this.Handle, -1, 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0010 | 0x0080);

// 设置本窗体为活动窗体

SetActiveWindow(this.Handle);

SetForegroundWindow(this.Handle);

// 设置窗体置顶

this.TopMost = true;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring 中,有两个 id 相同的 bean,会报错吗

我们知道,spring容器里面的bean默认是单例的,所以id是唯一的。但是需要注意,同一类型的bean可以有不同的id,比如有id1->bean,也可以有id2->bean。 下面再来详细回答一下文章的问题。 首先,在同一个…

汽车DTC故障内码与标准故障码的解析与转换

目录 一、故障内码与标准故障码的解析 (1)故障内码的信息格式与解析 (2)故障内码中DTC状态的解析 (3)故障内码与标准故障码之间的对应关系 二、故障内码与标准故障码的转换代码 一、故障内码与标准故障…

数字化项目管理如何推动项目快速上市?【洞见6】

AIGC时代的到来,标志着互联网从信息化的轻工业时代正式进入了互联网数字化的重工业时代。随之迎来的是人工智能技术的广泛引用,如何在项目管理中应用也是一个挑战,因为的项目本身的特点就是变化、复杂。笔者在为了进行突破,开始不…

vue父子组件传值不能实时更新

最近做项目,遇到个大坑,这会爬出来了,写个总结,避免下次掉坑。 vue父子组件传值不能实时更新问题,父组件将值传给了子组件,但子组件显示的值还是原来的初始值,并没有实时更新,为什么…

基于TCP协议的文件传输系统

最简单的一对一的服务端网络端通信(socket) Socket(IP地址:端口号),例如:如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23) socket可以理解成计算机提供给程序员的接…

R语言实现常用的5种分析方法(主成分+因子+多维标度+判别+聚类

R语言多元分析系列之一:主成分分析 主成分分析(principal components analysis, PCA)是一种分析、简化数据集的技术。它把原始数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为…

Android Application启动流程

详细流程分析 从 ActivityThread.java 的main方法开始看; public static void main(String[] args) {...ActivityThread thread new ActivityThread();thread.attach(systemfalse, startSeq);//1... }进入attach方法; if(!system){final IActivityMa…

flask配置https协议

感谢https://blog.csdn.net/qq_33934427/article/details/127456673,文中多有参考再实践一、要用https协议需要有ca证书,在windows10先下载windows版本openssl,地址如下https://share.weiyun.com/vfjVrMAb我是64位的选择下载完毕安装后配置环…

vmvare NAT模式设置

一、前言 这里为什么会写关于设置vmvare NAT模式的笔记呢,以前使用linux虚拟机都是使用桥接模式获取IP地址。最近出差仙林医院,发现使用无线网络,虚拟机桥接获取不到IP地址,所以使用NAT模式。 二、设置步骤 1.设置网络适配器 …

hudi系列-文件布局(file layout)

概念 hudi的文件布局是能实现增量查询、数据更新等特性的基础,每个hudi表有一个固定的目录,存放元数据(.hoodie)以及数据文件,其中数据文件可以以分区方式进行划分,每个分区有多个数据文件(基础文件和日志文件),这些数…

数据处理时代,有关数据的这些事

数据处理对于现在的企业来说已经是很平常的事,这主要是因为对数据的认识随时间的推移不断增加,企业用到数据的地方也越来越多。不过企业真正大规模利用的其实是数据资产,而非企业活动产生的所有数据,这两者并不互相统一。海量复杂…

WSH:一款功能强大的Web Shell生成器和命令行接口工具

关于WSH WSH是一款功能强大的Web Shell生成器和命令行接口工具。我们考虑到只用一个HTTP客户端来跟Webshell交互其实是一件很痛苦的事,我们需要在表格中输入命令,然后再点各种按钮。因此,我们开发出了WSH,我们可以轻松将其嵌入到…

代码随想录【Day16】| 104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数

104. 二叉树的最大深度 题目链接 题目描述: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7]&#xff0c…

在vscode中使用Typescript并运行

首先呢,我们在学习ts之前,需要先安装ts 1、安装 typescript npm install -g typescript //检查是否安装tsc -v ​ 2、生成配置文件,cd进入该文件夹,在控制台输 tsc --init ​ 此时我们就可以看到在ts文件夹下面出现了 一个tsco…

搞清品牌策划第一性原理

【班门弄斧】一个科技男的妄想~~ ………搞懂品牌营销的深层逻辑 马斯克说,搞清第一性原理 国内有学科理论支撑的品牌营销大咖 趣讲大白话:我读书多,别骗我 *********** 【国内品牌营销大咖们的理论支撑】 1、王志纲 -中国智慧(时…

C++——类和对象3

目录 1. 运算符重载 1.1 "" 的重载 1.2 前置 "" 和后置 "" 重载 1.3 流插入 "<<" 和流提取 ">>" 重载 1.4 运算符重载注意事项 2. const成员和static成员 2.1 const成员 2.2 static成员 3. 友元 …

C++递推基础知识

文章目录一、递推的概念二、递推和递归的区别三、递推的实例1、最基础的&#xff1a;斐波那契数列2、变形版斐波那契数列3、较复杂的递推式求解&#xff1a;昆虫繁殖4、经典逆推问题&#xff1a;题目数量一、递推的概念 1、什么是递推算法&#xff1f; 递推算法&#xff1a;是…

剑指 Offer 60. n个骰子的点数

题目 把n个骰子扔在地上&#xff0c;所有骰子朝上一面的点数之和为s。输入n&#xff0c;打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案&#xff0c;其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。 思路 动态规划&#xff1…

九龙证券|“股神”也做短线?巴菲特减仓逾八成台积电

美东时间2月14日盘后&#xff0c;“股神”巴菲特旗下公司伯克希尔哈撒韦&#xff08;下称“伯克希尔”&#xff09;发表的13F陈述引发商场热议。13F陈述被誉为“股市风向标”&#xff0c;出资者可藉此得以一窥华尔街大佬的最新出资思路。 根据美国证券交易委员会&#xff08;SE…

Vulnhub 渗透练习(三)—— Bulldog

环境搭建 下载链接 在 virtuallBox 中打开靶机。 virtuallBox 网络连接方式设置为仅主机。 vmware 设置桥接模式的网卡为 VirtualBox Host-Only Ethernet Adapter。 kail 网络适配设置为 NAT 和 桥接。 来自&#xff1a;https://blog.csdn.net/LYJ20010728/article/details/1…