c# winform窗口一直置顶显示在桌面最上方或最底层的方法

要让C# Winform窗口一直置顶显示在桌面的最上方或最底层需要使用其他的工具或API来实现。下面提供两种示例来解释如何实现这个功能。

方法一:使用Window API实现

可以通过调用Windows API来实现窗口置顶。具体步骤如下:

  1. 添加命名空间:
using System.Runtime.InteropServices;
using System.Text;
  1. 声明Windows API:
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

public const uint SWP_NOMOVE = 0x2;
public const uint SWP_NOSIZE = 0x1;
public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
  1. 调用API:

将窗口置顶:

SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

将窗口置底:

SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

方法二:使用TopMost属性实现

也可以通过直接设置窗口的TopMost属性,来让窗口置顶。具体步骤如下:

  1. 打开窗口的TopMost属性:

将窗口置顶:

this.TopMost = true;

将窗口置底:

this.TopMost = false;
  1. 在窗口关闭时,取消TopMost属性:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    this.TopMost = false;
    //...
}

示例代码:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

        public const uint SWP_NOMOVE = 0x2;
        public const uint SWP_NOSIZE = 0x1;
        public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
        public static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //将窗口置顶
            SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //将窗口置底
            SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //在窗口关闭时,取消TopMost属性
            this.TopMost = false;
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# winform窗口一直置顶显示在桌面最上方或最底层的方法 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C# SqlHelper应用开发学习

    C# SqlHelper应用开发学习攻略 1. 学习SqlHelper类 SqlHelper是C#中常用的操作数据库的工具类。学习SqlHelper需要掌握以下几个方面: SqlHelper的基本用法,包括连接数据库、执行SQL语句等; SqlHelper的扩展方法,包括重载的ExecuteNonQuery、ExecuteScalar等; SqlHelper…

    C# 2023年6月2日
    00
  • 学习TraceLogging事件,使用ETW记录,并使用WPA捕获和分析跟踪

    优化响应行为的交互 下载WINDOWS评估和部署工具包 (Windows ADK) 保持默认安装 驱动延迟优化的基本步骤包括: 定义方案并添加 TraceLogging 事件。TraceLogging 是用于日志记录事件的系统,无需清单即可解码,TraceLogging基于windows事件跟踪(ETW),并提供检测代码的简化办法。C#可选的有.NET Ev…

    C# 2023年4月30日
    00
  • 如何用C#创建用户自定义异常浅析

    如何用C#创建用户自定义异常浅析 什么是用户自定义异常? C#中,用户自定义异常是一种可以由程序员自己定义并抛出的异常类型。在程序中,如果发现了某个错误情况,可以通过自定义异常来更加精确地描述问题,并向上层抛出。这样,程序的处理逻辑和异常捕捉代码会变得更加简单明了。 如何创建用户自定义异常? 要创建一个用户自定义异常类型,首先需要继承自System.Exce…

    C# 2023年6月6日
    00
  • C#实现用栈求逆序的方法示例

    下面是C#实现用栈求逆序的方法示例的完整攻略: 什么是栈? 栈(Stack)是一种常用的数据结构,它是一种后进先出(Last In First Out)的线性表,其限制仅在表尾进行插入和删除操作。换句话说,栈基本操作有两个:入栈和出栈。入栈就是将一个新元素压入栈顶,出栈就是将一个元素从栈顶弹出。 如何使用栈求逆序? 将一个序列逆序,是计算机科学中经常遇到的问…

    C# 2023年6月6日
    00
  • C#中常量和只读变量的区别小结

    下面是详细的讲解“C#中常量和只读变量的区别小结”的完整攻略: 常量和只读变量的区别 在C#中,常量和只读变量都用来表示一些固定不变的值,但它们之间有明显的区别。 常量 常量在定义后就无法再次被修改。常量的值必须在编译时确定。常量使用const关键字来定义,如下所示: const int MaxValue = 100; 常量的名称必须以大写字母开头。在使用常…

    C# 2023年6月7日
    00
  • c#调用vc写的ocx控件示例

    C# 调用 VC 写的 OCX 控件需要使用 COM 互操作技术来实现,这里提供一份完整攻略,包含如下步骤: 编写 VC 的 OCX 控件首先需要使用 VC 编写一个 OCX 控件,在编写过程中需要注意接口设计,以便在后续的调用中能够顺利确定方法和参数。实现后,需要注册控件并生成 TLB 文件。 引入 TLB 文件在 C# 项目中引入生成的 TLB 文件,以…

    C# 2023年6月7日
    00
  • Sql Server下数据库链接的使用方法

    下面是Sql Server下数据库链接的使用方法的完整攻略: 创建数据库链接 要在 SQL Server 中创建数据库链接,可以使用以下语法: EXEC sp_addlinkedserver @server = ‘SERVER_NAME’, @srvproduct = ‘PRODUCT_NAME’, @provider = ‘PROVIDER_NAME’, …

    C# 2023年5月31日
    00
  • redis与memcached的区别_动力节点Java学院整理

    Redis与Memcached的区别 1. 数据类型的支持 Redis相较于Memcached,数据类型更加丰富,能够支持更多的数据结构,包括字符串(string)、哈希表(hash)、列表(list)、集合(set)和有序集合(sorted set)等等。 例如: 字符串示例 Redis支持存储和操作二进制字符串,而Memcached只支持存储字符串。 #…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部