首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无边框和可调整大小的窗体(C#)

基础概念

无边框窗体和可调整大小的窗体是Windows应用程序中常见的两种窗体类型。无边框窗体去掉了标准窗体的边框和标题栏,提供了更现代的外观。可调整大小的窗体允许用户通过拖动窗体的边缘来改变其大小。

相关优势

  • 无边框窗体
    • 现代感更强,适合需要自定义外观的应用。
    • 可以完全控制窗体的布局和外观。
    • 可以实现更复杂的动画和交互效果。
  • 可调整大小的窗体
    • 用户可以根据需要调整窗体大小,提高用户体验。
    • 适用于需要显示大量信息或多种视图的应用。

类型

  • 无边框窗体
    • 通过设置窗体的FormBorderStyle属性为None来实现。
    • 需要手动处理窗体的拖动、缩放等操作。
  • 可调整大小的窗体
    • 通过设置窗体的FormBorderStyle属性为SizableToolWindowSizable来实现。
    • 可以通过重写OnResize方法来处理窗体大小变化时的逻辑。

应用场景

  • 无边框窗体
    • 游戏界面、多媒体播放器、自定义工具栏等。
    • 需要高度自定义外观和交互的应用。
  • 可调整大小的窗体
    • 文本编辑器、IDE、图像处理软件等。
    • 需要灵活调整显示内容大小的应用。

示例代码

以下是一个简单的C#示例,展示如何创建一个无边框且可调整大小的窗体:

代码语言:txt
复制
using System;
using System.Drawing;
using System.Windows.Forms;

public class CustomForm : Form
{
    public CustomForm()
    {
        this.FormBorderStyle = FormBorderStyle.None;
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        this.ResizeRedraw = true;
        this.DoubleBuffered = true;
        this.ClientSize = new Size(800, 600);
        this.BackColor = Color.White;

        // 添加鼠标事件处理
        this.MouseDown += CustomForm_MouseDown;
        this.MouseMove += CustomForm_MouseMove;
        this.MouseUp += CustomForm_MouseUp;
    }

    private bool isDragging = false;
    private Point dragCursorPoint;
    private Point dragFormPoint;

    private void CustomForm_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            isDragging = true;
            dragCursorPoint = Cursor.Position;
            dragFormPoint = this.Location;
        }
    }

    private void CustomForm_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDragging)
        {
            Point dif = Point.Subtract(Cursor.Position, new Size(dragCursorPoint));
            this.Location = Point.Add(dragFormPoint, new Size(dif));
        }
    }

    private void CustomForm_MouseUp(object sender, MouseEventArgs e)
    {
        isDragging = false;
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new CustomForm());
    }
}

参考链接

常见问题及解决方法

  1. 无边框窗体无法拖动
    • 原因:未正确处理鼠标事件。
    • 解决方法:添加鼠标按下、移动和释放事件处理程序,实现窗体的拖动逻辑。
  • 窗体调整大小时出现闪烁
    • 原因:窗体重绘机制未正确设置。
    • 解决方法:设置ResizeRedraw属性为true,并在OnPaint方法中进行优化。
  • 窗体边缘拖动不流畅
    • 原因:鼠标事件处理逻辑复杂或效率低下。
    • 解决方法:优化鼠标事件处理逻辑,减少不必要的计算和重绘操作。

通过以上方法和示例代码,你可以创建一个无边框且可调整大小的窗体,并解决常见的相关问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#可视化程序设计课堂笔记 第四章

第四章 Windows窗体应用 4.2 使用Form窗体 4.2.1 窗体的常用属性 属性名 说明 Name 窗体对象名,用以在代码中标识 BackColor 窗体的背景色 Icon 窗体图标...BackgroundImage 背景图 FormBorderStyle 边框样式,7个可选,默认Sizable MaximizeBox 是否可以窗口最大化,默认为TRUE ShowInTaskbar 确定窗体是否出现在...Windows任务栏中,默认为TRUE StartPosition 初始位置 TopMost 是否置顶 WindowState 确定窗体是否可视化 Text 窗口标题 4.2.1.2 窗体的边框样式...属性值 说明 Fixed3D 固定的三位边框 FixedDialog 固定的对话框样式的粗边框 FixedSingle 固定的单行边框 FixedToolWindow 不可调整大小的工具窗体边框 None...无边框 Sizable(默认值) 可调整大小的边框 SizableToolWindow 可调整大小的工具窗体边框 4.2.1,3 控制窗体的显示位置 属性值 说明 Manual 窗体的位置由Location

69620
  • 【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去

    TopMost=true实现,同时移除OnShow重写 //- 解决子控件无聚焦框(焦点虚线框,FocusCues)的问题 //Update:201508261806 //- 重绘右下角调整大小手柄...,解决系统自绘在XP下太靠边角从而覆盖边框的问题 //- 支持边缘和边角拖动改变窗体大小 //- 启用双缓冲 public class FloatLayerBase : Form...get { return new Size(_borderWidth, _borderWidth); } } /// /// 指示窗体是否处于可调整大小状态...ShowDialog弹出时,在收到WM_SHOWWINDOW前,Owner会被Disable //故需在收到该消息后立即Enable它,不然Owner窗体和本窗体都将处于无响应状态...关于使用,先看一下FloatLayerBase的部分公开成员: 上面4个属性都是跟边框有关的,边框总共有3种形态,三维、线型、无,由BorderType指定;当为三维形态时,由Border3DStyle

    2.8K20

    用VS2017进行移动开发(C#、VB.NET)——OfflineCameraButton控件,Smobiler移动开发

    ,默认设置为“255”,即不透明,如图2; 图 2 若将该属性设置为“0”,该控件的背景色即为全透明的,显示为Smobiler窗体设计界面的背景色。...Border属性 设置控件边框,默认设置为“0,0,0,0”,如图3; 图 3 BorderColor属性 设置控件边框颜色,默认设置为“Black”,如图4; 图 4 BorderRadius属性 设置控件边框的角度...,默认设置为“0”,即控件边框的角度呈直角,如图5; 图 5 BorderSize属性 设置控件边框大小,默认设置为“0.1”,如图6; 图 6 Enabled属性 设置控件是否可以对用户交互作出响应,...将该属性设置为“True”,则控件则可以与用户进行交互,如图7; 图 7 ForeSize属性 设置控件字体大小,默认设置为“4”,则该控件的字体大小为4,如图8; 图 8 若将该属性设置为“12”,控件的字体则会变大...图 17 若将该属性设置为“2,2,2,2”,即控件与边框之间的间隔变大。

    96930

    【愚公系列】2023年11月 Winform控件专题 Form控件详解

    1.属性介绍1.1 autoscalemodeAutoScaleMode属性用于控制当窗体大小发生变化时,窗体上的控件如何自适应调整大小、位置和字体大小等属性。...在执行该代码后,点击按钮,就会在MainForm窗体中创建一个ChildForm子窗体,该子窗体可以在MainForm的客户区中移动和调整大小。...FixedSingle:该选项将使表单有一个单独的边框。Fixed3D:该选项将使表单有一个3D效果的边框。FixedDialog:该选项将使表单有一个对话框样式的边框。...Sizable:该选项将使表单有一个可调整大小的边框。使用这个属性非常简单,只需在属性窗格中选择所需的选项即可。...1.22 ClientSizeClientSize是Winform中控件的一个属性,它表示控件的内部大小。通常,它被用于指定一个控件的工作区大小,即不包括边框和标题栏的可用区域。

    2.6K21

    .net题库第1-9章

    .csP .cs (答案) .C .C# 得分: 10.0 /10.0 第3题 下面对Write()和WriteLine()方法的描述,( )是正确的。...窗体有边框但不能调整大小 窗体是透明的 窗体没有边框并不能调整大小 (答案) 窗体没有边框但能调整大小 得分: 10.0 /10.0 第8题 关于窗体的MouseDown事件过程Form1...注意:(1)区分大小写,且前后和中间均勿加空格;(2)只写方法名,不要加括号 学生答案: DrawLine 标准答案: DrawLine 得分: 10.0 /10.0 第5题 下面代码用于实现在窗体打开时动态加载一个按钮...: 0.0 /10.0 第3题 在C#中,目录管理主要使用System.IO名称空间下的Directory类和【 】类。...注意:区分大小写,且前后和中间均勿加空格 学生答案: StreamReader 标准答案: StreamReader 得分: 10.0 /10.0 第5题 C#文件操作类中,【 】类所创建的对象可以获取文件的大小

    1.1K10

    画布就是一切(一)— 画布编程的基本模式

    画布编程的基本模式 画布基本介绍 我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。...简单绘制 以下的代码就是C# 对一个空白的窗体绘制一个红色矩形: /// /// 窗体绘制事件,由WinForm窗体消息事件框架调用 /// private void...对于一个矩形,默认的情况下显示黑色边框,当鼠标悬浮在矩形上的时候,矩形的边框能够显示为红色,就像下图一样: 那么如何实现这个功能呢?...整理状态最直接的方式,就是看所实现的效果需要哪些UI元素。悬浮变色的场景下,需要的东西很简单: 矩形位置 矩形大小 矩形边框颜色 整理完成以后,我们还需要进行提炼。...对于1、2来说,无需过多讨论,它们是核心渲染基础,再简单的图像渲染,都离不开position和size这两个核心的元素。 但对于矩形边框颜色是不是状态,则需要探讨。

    21420

    画布就是一切(一)— 画布编程的基本模式

    画布编程的基本模式 画布基本介绍 我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。...简单绘制 以下的代码就是C# 对一个空白的窗体绘制一个红色矩形: /// /// 窗体绘制事件,由WinForm窗体消息事件框架调用 /// private void...对于一个矩形,默认的情况下显示黑色边框,当鼠标悬浮在矩形上的时候,矩形的边框能够显示为红色,就像下图一样: 那么如何实现这个功能呢?...整理状态最直接的方式,就是看所实现的效果需要哪些UI元素。悬浮变色的场景下,需要的东西很简单: 矩形位置 矩形大小 矩形边框颜色 整理完成以后,我们还需要进行提炼。...对于1、2来说,无需过多讨论,它们是核心渲染基础,再简单的图像渲染,都离不开position和size这两个核心的元素。 但对于矩形边框颜色是不是状态,则需要探讨。

    26610

    画布就是一切(一)— 画布编程的基本模式

    画布编程的基本模式 画布基本介绍 我开发过基于QT的客户端程序、基于C# WinForm客户端,开发过Java后端服务,此外,前端VUE和React我也开发过不少。...简单绘制 以下的代码就是C# 对一个空白的窗体绘制一个红色矩形: /// /// 窗体绘制事件,由WinForm窗体消息事件框架调用 /// private void...对于一个矩形,默认的情况下显示黑色边框,当鼠标悬浮在矩形上的时候,矩形的边框能够显示为红色,就像下图一样: 那么如何实现这个功能呢?...整理状态最直接的方式,就是看所实现的效果需要哪些UI元素。悬浮变色的场景下,需要的东西很简单: 矩形位置 矩形大小 矩形边框颜色 整理完成以后,我们还需要进行提炼。...对于1、2来说,无需过多讨论,它们是核心渲染基础,再简单的图像渲染,都离不开position和size这两个核心的元素。 但对于矩形边框颜色是不是状态,则需要探讨。

    26820

    MultiRow发现之旅(六)- 使用MultiRow开发票据应用(附源码)

    在工程中心添加一个windows窗体,命名为“发票窗体”,在设计器中拖放一个MultiRow和一个按钮。 然后添加新模板并且进入新模板的编辑界面。...然后在属性窗口中展开DefaultCellStyle属性,点开Border属性的编辑器,选择普通边框,点击“无”,然后点击确定,关闭对话框。至此发票的抬头就完全做好了。 8. 现在来编辑发票的主体。...图中的2号Cell还设置了Font的大小,并把Style中的TextVertical和UseCompatibleTextRendering属性都设为了true。...在弹出的边框编辑器中选择“圆角边框”,并选择如下图所示的颜色和线条样式,点击外边框: ? 然后点击确定关闭对话框。完成之后是这个样子: ?...回到发票窗体的设计器。调整Multirow的大小到刚好能显示全部发票内容。 ? 双击打印按钮,添加事件处理代码: ? 在发票窗体中给发票窗体类添加如下方法: ?

    1.2K50

    如何点击穿透Electron不规则窗体的透明区域

    28932-20200930141340341-984687124.png 实现一个不规则窗体 这里我们实现一个圆形窗体,实现其他形状的窗体与这个方法类似。...首先,把窗口的高度(height)和宽度(width)值修改为相同的值,使窗口成为一个正方形。...其次,把窗口的透明属性(transparent)设置为true,这样设置之后窗口还是正方形的,但只要我们控制好内容区域的Dom元素的形状,就可以让窗口看起来像一个不规则形状一样。...不规则窗口往往需要自定义边框和标题栏,所以frame也设置为false。 另外,透明的窗口不可调整大小。所以将resizable属性设置为false。...首先,需要用到窗口对象的setIgnoreMouseEvents方法,该方法可以使窗口忽略窗口内的所有鼠标事件,并且在此窗口中发生的所有鼠标事件都将被传递到此窗口背后的内容。

    3.1K10

    在 Windows 11 中处理 WindowChrome 的圆角

    也就是说在 Windows 11 上窗体需要应用半径为 8px 的圆角。 2....下面这两张图是同一个自定义的 Window 分别在 Windows 11 和 10 上的样子: 可以看到这是个模仿 Windows 10 的 Window 样式,边框只有 1 像素。...在 Windows 11 里 WindowChrome 会自动裁剪最外层那 1 像素边框和圆角的其它部分,然后补上一条灰色的边框。这做法简单粗暴但有效。...最后 关于使用 WindowChrome 自定义窗体的内容,可以参考这几篇文章: Window(窗体)的UI元素及行为:这篇文章主要讨论标准 Window 的 UI 元素和行为。...源码 我做了个小 Demo 用户看看这篇文章提到的不同边框和 DWM_WINDOW_CORNER_PREFERENCE 设定下的效果,源码可以从这里获取: https://github.com/DinoChan

    3K10

    C# winform ——界面美化技巧

    C# winform 界面美化技巧(扁平化设计) 转 关于C#界面美化的一些小技巧 在不使用第三方控件如 IrisSkin 的前提下,依然可以对winform做出让人眼前一亮的美化 ?...首先,我们先来实现主界面的扁平化 此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件。...将主窗体FormBorderStyle更改为None,这样就得到了一个无边框的窗体(winform自带边框太丑。。)...调节背景色,建议找到自己喜欢的颜色,然后使用取色器(我用的是按键精灵自带的取色板)取得想要的RGB参数,输入到BackColor属性之中 在主窗体的Mouse_Down中添加如下事件,实现窗体随意拖动:...方法来改变它的颜色(前景色和背景色)。

    5.7K41

    初识Windows程序

    window 操作系统中,处处是窗体 简单 强大 方便 灵活 步骤 新建项目  项目类型 visual C#项目 模板 window应用程序 用partial 将同一个窗体的代码分开放在两个文件中: 一个存放在...vs自动生成的代码中 冒号表示继承 像孩子继承父母的特征所有窗体都继承Form 窗体标题 : Name 窗体图标: Icon 图片背景Backgroundimage 背景颜色 backcolor 最大化按钮...:MaximinBox 最小化按钮:Minimun 窗体边框样式 :FROMBorderStyle 窗体初始位置:StartPosition 窗体状态:WindowsState 帮助按钮:HelpButton...   控件类名   命名前缀 标签   Label   lal 文本框   TextBox   txt 组合框   ComboBox  Cbo 按钮   Button   btn 规范化命名可以提高程序的可读性和可维护性...显示消息 向用户请求消息 实现步骤 1定义窗体对象 2显示窗体 语法 被调用的窗体类名 窗体对象=new被调用的窗体类名(); 窗体对象.Show();

    4.3K40

    C# winform 界面美化技巧(扁平化设计)

    C# winform 界面美化技巧(扁平化设计) 关于C#界面美化的一些小技巧 在不使用第三方控件如 IrisSkin 的前提下,依然可以对winform做出让人眼前一亮的美化 首先,我们先来实现主界面的扁平化...此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件。...将主窗体FormBorderStyle更改为None,这样就得到了一个无边框的窗体(winform自带边框太丑。。)...调节背景色,建议找到自己喜欢的颜色,然后使用取色器(我用的是按键精灵自带的取色板)取得想要的RGB参数,输入到BackColor属性之中 在主窗体的Mouse_Down中添加如下事件,实现窗体随意拖动...方法来改变它的颜色(前景色和背景色)。

    7.2K30
    领券