You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms自定义TextBoxUnderline控件设计器中尺寸变为设定值1.5倍如何解决

WinForm自定义TextBox尺寸自动放大1.5倍问题解决方案

问题原因

  • 构造函数内直接设置Size的操作会被WinForm设计器的自动DPI缩放逻辑覆盖,若系统显示缩放比例为150%,就会出现尺寸变为设定值1.5倍的现象。
  • 原生TextBox控件即使设置AutoSize = false,默认尺寸逻辑仍会优先适配字体参数,构造函数内的尺寸赋值优先级低于控件初始化的默认规则。
  • 设置MaximumSize后尺寸正常的原因是该参数为尺寸限制最高优先级,会强制覆盖缩放后的尺寸,但是会带来后续无法自由调大尺寸的问题。

修复步骤

  1. 删除构造函数中this.Size = new Size(200, 200);这行代码
  2. 在TextBoxUnderline类中重写DefaultSize属性,该属性定义的是控件的默认初始尺寸,不会被设计器缩放逻辑随意覆盖,修改后完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace XYZ
{
    class TextBoxUnderline : TextBox
    {
        // 重写默认尺寸属性
        protected override Size DefaultSize
        {
            get
            {
                return new Size(200, 200);
            }
        }

        public TextBoxUnderline()
        {
            this.BorderStyle = BorderStyle.None;
            this.AutoSize = false;
            this.BackColor = SystemColors.Control;

            this.MouseEnter += TextBoxUnderline_MouseEnter;
            this.MouseLeave += TextBoxUnderline_MouseLeave;
            this.GotFocus += TextBoxUnderline_GotFocus;
            this.LostFocus += TextBoxUnderline_LostFocus;

            this.Controls.Add(new Label()
            { Height = 1, Dock = DockStyle.Bottom, BackColor = Color.Black });
        }

        void TextBoxUnderline_MouseLeave(object sender, EventArgs e)
        {
            if (((TextBoxUnderline)sender).Focused == false)
            {
                ((TextBoxUnderline)sender).BackColor = SystemColors.Control;
            }
        }

        void TextBoxUnderline_MouseEnter(object sender, EventArgs e)
        {
            ((TextBoxUnderline)sender).BackColor = Color.White;
        }

        private void TextBoxUnderline_LostFocus(object sender, EventArgs e)
        {
            ((TextBoxUnderline)sender).BackColor = SystemColors.Control;
        }

        private void TextBoxUnderline_GotFocus(object sender, EventArgs e)
        {
            ((TextBoxUnderline)sender).BackColor = Color.White;
        }
    }
}
  1. 重新生成项目后再次将控件拖拽到设计视图,初始尺寸就会是你设定的200*200,后续可以在属性面板自由调整控件尺寸,没有最大尺寸限制。

内容的提问来源于stack exchange,提问作者Filledille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:12:01