带底边框的文本框

2023-12-13

我希望有TextBox有底部边框,但绘制的图形为TextBox调整大小时会扭曲/损坏,因为Color.Transparent.

使用我找到的代码,我能够创建一个带下划线的文本框(具有透明顶部、左侧、右侧的绘制矩形)。问题是当我调整表单/窗口的大小时:当我将其调整为较小,然后再次调整大小以展开它时,绘制的图形会扭曲。有什么解决办法吗?

Here are photos: The second photo has been already resized smaller, then back to a larger size. NormalContracted then Expanded

这是代码:

[DllImport("user32")]
    private static extern IntPtr GetWindowDC(IntPtr hwnd);
    struct RECT {
        public int left, top, right, bottom;
    }
    struct NCCALSIZE_PARAMS {
        public RECT newWindow;
        public RECT oldWindow;
        public RECT clientWindow;
        IntPtr windowPos;
    }

    float clientPadding = 0;
    int actualBorderWidth = 2;
    Color borderColor = Color.Black;
    protected override void WndProc(ref Message m) {
        //We have to change the clientsize to make room for borders
        //if not, the border is limited in how thick it is.
        if (m.Msg == 0x83) { //WM_NCCALCSIZE 
            if (m.WParam == IntPtr.Zero) {
                RECT rect = (RECT)Marshal.PtrToStructure(m.LParam, typeof(RECT));
                rect.left += 2;
                rect.right -= 2;
                rect.top += 0;
                rect.bottom -= 0;// (int)clientPadding;
                Marshal.StructureToPtr(rect, m.LParam, false);
            } else {
                NCCALSIZE_PARAMS rects = (NCCALSIZE_PARAMS)Marshal.PtrToStructure(m.LParam, typeof(NCCALSIZE_PARAMS));
                rects.newWindow.left += (int)clientPadding;
                rects.newWindow.right -= (int)clientPadding;
                rects.newWindow.top += (int)clientPadding;
                rects.newWindow.bottom -= 2;
                Marshal.StructureToPtr(rects, m.LParam, false);
            }
        }
        if (m.Msg == 0x85) {//WM_NCPAINT    
            IntPtr wDC = GetWindowDC(Handle);
            using (Graphics g = Graphics.FromHdc(wDC)) {
                ControlPaint.DrawBorder(g, new Rectangle(0, 0, Size.Width, Size.Height),
                    Color.Transparent, 1, ButtonBorderStyle.Solid,
                    Color.Transparent, 1, ButtonBorderStyle.Solid,
                    Color.Transparent, 1, ButtonBorderStyle.Solid,
                    borderColor, actualBorderWidth, ButtonBorderStyle.Solid);
            }
            return;
        }
        base.WndProc(ref m);
    }

EDIT :

I already found the issue, it's because of the Color.Transparent I fixed it by changing it to Color.White, since I have a white background. But then, that would not always be the case, how would I prevent that "Flickering/Tearing" while using Color.Transparent?

有一个TextBox带有底部边框,我可以提供的最简单的解决方法是将 1 像素高度的标签(或其他控件)停靠在底部TextBox:

using System.Drawing;
using System.Windows.Forms;
public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        BorderStyle = System.Windows.Forms.BorderStyle.None;
        AutoSize = false; //Allows you to change height to have bottom padding
        Controls.Add(new Label()
                    { Height = 1, Dock = DockStyle.Bottom, BackColor = Color.Black });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带底边框的文本框 的相关文章

  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 是否有与 C++11 emplace/emplace_back 函数类似的 C# 函数?

    从 C 11 开始 可以写类似的东西 include
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem

随机推荐

  • 使用 jQuery 存储数据有优势吗?

    我知道更多关于 jQuery 如何存储数据的信息 执行其中一项或另一项是否有任何优势 editCity data href xx var a editCity data href or editCity attr data href xx
  • 通过以太网端口或主机 USB 的 SSH Beaglebone

    我对 Beagle Bone black 还很陌生 一直玩得很开心 直到我用来 SSH 的 USB 设备插孔意外地从 Beagle Bone black 上脱落 我很难将 USB 设备插孔 USB 迷你 A B 型 焊回原位 这迫使我寻找下
  • 在 Windows 10 或 7 中的 Apache Zeppelin 中运行 Spark 程序时出现错误

    我是 Apache Zeppelin 的新手 安装0 8 0并使用7000端口访问Zeppelin 配置了一些路径 如下所述 JAVA HOME C Program Files Java jdk1 8 0 144 HADOOP HOME C
  • 广义相加模型 data.frame.default 错误:尝试应用非函数

    我正在尝试使用 mgcv 包运行一般的附加模型 但我不断收到 model frame default 错误 Error in model frame default formula Presence Sex wind speed baro
  • Scikit Learn - ValueError:数组包含 NaN 或无穷大

    我的数据集中没有 NaN 我已经彻底检查过 为什么我在尝试拟合分类器时不断收到此错误 数据集中的一些数字相当大 一些小数位超出了 10 位小数 但我不认为这会导致错误 我在下面包含了一些 pandas DataFrame 信息以及错误本身
  • Python-两个数字之和程序错误[重复]

    这个问题在这里已经有答案了 我刚刚开始学习 Python 编程 我编写了一个简单的程序来计算两个用户输入数字的总和 a b input enter first number input enter second number print s
  • Prometheus 和 Grafana - 有没有办法让用户使用机器?

    我一直在与 Prometheus 和 Grafana 合作 获取几个计算机实验室的状态和统计数据 有没有一种方法可以让我通过 Prometheus 登录计算机的用户并将其放到 Grafana 上 我会列出2个选项 第一个将 Pushgate
  • 从 3 个视图中创建 3D 对象

    I d like to calculate an 3D object out of the 3 views The principle is shown in following figure 每个视图都存储在二维矩阵中 其中二进制值表示对
  • 用 sum group by 计算平均成绩

    我必须显示每个用户的名字和姓氏 学习年份 年龄 平均成绩以及一般平均成绩 平均成绩 I 需要这样计算 Sum AverageGrade total number of grades userID FirstName LastName Bir
  • Rails 3:通过关联使用 has_many 进行多重选择

    我希望能够通过多项选择为一篇帖子选择多个类别 我有下一个模型 Post Category 和 PostCategory class Post lt ActiveRecord Base has many post categories has
  • 虚假外键约束失败

    我收到此错误消息 第 40 行出现错误 1217 23000 无法 删除或更新父行 a 外键约束失败 当我尝试删除表格时 DROP TABLE IF EXISTS area 定义如下 CREATE TABLE area area id ch
  • 如何通过匹配另一个数组来过滤R中的矩阵

    现在我在 R 中有一个矩阵 a matrix c A B B C 61 25 23 28 43 74 67 11 nrow 4 和另一个数组 b c B C D 如何过滤矩阵 a 以便它仅返回匹配项 即 matrix c B B C 25
  • Tomcat JDBC 连接在 Eclipse 中工作但不能独立运行

    我们正在经历升级数据库软件以及从 Tomcat 5 5 到 Tomcat 7 的过程 因此 我使用新的 JDBC 驱动程序 在本例中是推荐的 SQL Anywhere JDBC 4 0 驱动程序 它需要 ODBC 服务 我已经成功地让这一切
  • 如何获取每个应用程序的权限?如何在Android上以编程方式做到这一点?

    如何获取每个应用程序的权限详细信息 如何以编程方式做到这一点 我要显示 每个应用程序的应用程序权限详细信息 在文本视图上 但我尝试了但不行 你好 java import android app Activity import android
  • 在 Android 文件资源管理器中按文件类型过滤

    在我的应用程序中 我想让用户从文件资源管理器应用程序中选择文件 我已经能够通过使用以下代码 在 C Xamarin 中 来做到这一点 private void AddFile if IsFileExplorerAppInstalled To
  • 如何使用ajax在Django管理表格内联中读取/写入输入字段?

    我正在寻找使用 ajax 动态更新内联条目的方法 即 当用户从下拉框中选择一个项目时 可以用数据填充关联的输入字段 ajax 的views py 部分应该很简单 但对我来说有一个问题是如何在js中获取下拉框的名称 这些名称可以动态添加 以下
  • 如何在不同的 Spring 上下文之间共享 Spring bean?

    我们有一个使用 Spring BlazeDS 集成的应用程序 到目前为止 我们刚刚使用了 Spring 和 Flex 并且运行良好 我们现在还需要添加一些 Spring MVC 控制器 Spring BlazeDS 文档指出 执行此操作的方
  • 使用 C# 包装器从任务栏中删除应用程序?

    有没有办法为现有应用程序构建 C 包装器 以便我将其从任务栏中删除 更多信息 我有一个计时器应用程序 我想使用它 但没有使用 因为它很好 很糟糕 看https superuser com questions 92774 quickbooks
  • CSS 中的尾随行装饰标题

    我正在尝试创建带有一些精美装饰的标题标签 最终 我想达到这个目的 不过 我在文本后添加尾随线装饰时遇到问题 我最初的想法是有一个容器 然后在该容器中包含 h1 和包含该行的 span 标签 但我似乎不太能让该行与位于其上方的文本居中 我试过
  • 带底边框的文本框

    我希望有TextBox有底部边框 但绘制的图形为TextBox调整大小时会扭曲 损坏 因为Color Transparent 使用我找到的代码 我能够创建一个带下划线的文本框 具有透明顶部 左侧 右侧的绘制矩形 问题是当我调整表单 窗口的大