从 TextBox 继承的 vb .NET 自定义控件不会触发 Paint 事件

2023-12-03

我需要一个始终被禁用的多行文本框,但它不应该将自己涂成灰色,但我想保留其设计者选择的颜色。

我以前对始终黑色标签(无多行)有相同的要求,因此我从 Label 继承,例如:

Imports System.ComponentModel

   Public Class LabelDisabled
        Inherits Label

        Sub New()
            InitializeComponent()
            Enabled = False
        End Sub

        Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
            ' always draw it black
            e.Graphics.DrawString(Me.Text, Me.Font, Brushes.Black, 0, 0)
        End Sub

    End Class

效果很好。现在我想要同样的东西,但带有多行标签,所以我选择继承自 TextBox:

Imports System.ComponentModel

Public Class CustomControl1
    Inherits TextBox

    Sub New()

        InitializeComponent()
        'Paint never fires anyway
        'Enabled = False
    End Sub


    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim brush As New SolidBrush(Me.ForeColor)
        e.Graphics.DrawString(Me.Text, Me.Font, brush, 0, 0)
    End Sub

End Class

现在,Paint 事件永远不会在继承的 CustomControl1(TextBox)控件中触发。

为什么我无法获取 Paint 事件?

另外,如果我想让 Enabled 属性不可见并且用户不可设置,我会这样做:

<Browsable(False),
DefaultValue(False)>
Public Overloads Property Enabled As Boolean
    Get
        Return False
    End Get
    Set(ByVal value As Boolean)
    End Set
End Property

但这样,我就无法设置“真正的”Enabled 属性,我指的是支持字段。


我找到了解决方案。看起来 TextBox 即使对于子类也禁用 Paint 事件。但您可以调用 SetStyle 强制 WM_PAINT 位:

Public Class DisabledTextBox
    Inherits TextBox

    Public Sub New()
        InitializeComponent()

        Enabled = False
        SetStyle(ControlStyles.Selectable, False)
        SetStyle(ControlStyles.UserPaint, True)

    End Sub

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim brush As New SolidBrush(Me.ForeColor)
        e.Graphics.DrawString(Me.Text, Me.Font, brush, 0, 0)
    End Sub

End Class

它按预期完美运行:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 TextBox 继承的 vb .NET 自定义控件不会触发 Paint 事件 的相关文章

随机推荐

  • C++ 调用非默认构造函数作为成员[重复]

    这个问题在这里已经有答案了 假设我有一个类 A 和一个类 B B 用作 A 中的成员 B 没有默认构造函数 但需要参数 class B B int i class A B m B A m B 17 this gives an error 我
  • 当应该使用 String 时,groupingBy 将键的对象返回为 Map

    假设我有一个品牌对象列表 POJO 包含返回字符串的 getName 我想建立一个Map
  • R 记录脚本的显示名称

    这是我当前问题的一个原子示例 目前我有一个包含多个 R 脚本的项目 全部位于名为 DIR 的同一目录中 我在 DIR 中有一个主脚本 它获取所有 R 文件 并包含一个基本配置 basicConfig 我在 DIR 中使用了两个脚本 dog
  • C++:重复执行 do while 循环

    我对这个超级新手问题感到非常抱歉 但我一生都无法理解如何重复 do while 循环 我将 while 循环更改为 do while 循环 现在我不知道如何让它询问 您想重复 Y 还是 N 有什么解释吗 我读过各种完成 do while 循
  • 如何使用 jQuery 访问多维 JSON 数组中的值

    因此 我使用 getJSON 获取多维 JSON 数组 并且想要访问数组中的值 但无法访问比数组中第一个元素更长的值 producers producer id 1 name Em u00e5mejeriet address Grenv u
  • 异步承诺返回函数的同步与异步执行

    当制作返回承诺的异步函数时 在每个实现中我都看到了这种做法 function asyncFunction return new Promise resolve reject gt the function code if condition
  • WPF WebBrowser 控件中的持久 cookie?

    我正在使用 WPF WebBrowser 在应用程序内显示在线帮助 只是一些小网页 其中一些页面使用 cookie 仅在页面被查看的前几次显示项目 这是 为什么不尝试 X 类型的事情 但是 由于某种原因 cookie 似乎无法在 WebBr
  • 模糊效果 CSS3 Firefox(linux)

    如果用户未注册 我试图在我的相册上获得模糊效果 我明白了 但仅限于 chrome 在我的 Firefox 14 0 1 linux 中我无法让它工作 我的html模板 我在django下开发 h2 Gallerie h2 ul class
  • matplotlib 3D 图,plot_surface 黑色

    我有以下数据 https www dropbox com s u7ee09chaixw5vb draw dl 0 它是使用python3中的pickle保存的 它只是一个二维的python列表 形式为z 我使用以下代码绘制 3D 图形 但它
  • 命名空间的自定义配置节问题的智能感知

    我刚刚滚动了一个自定义配置部分 为 Intellisense 创建了一个随附的架构文档 并将其添加到 Web config 的 Schemas 属性中迈克尔 斯图姆的回答另一个类似的问题 不幸的是 可能由于我以有限的知识手工创建 XSD I
  • 如何使用字符串设置 jQueryUI Datepicker 的 minDate/maxDate?

    jQueryUI 日期选择器文档指出可以使用 当前日期格式中的字符串 来设置 minDate 选项 所以我尝试了以下方法来初始化日期选择器 input date datepicker minDate 01 01 2010 maxDate 1
  • 融合具有列模式的 data.table

    我有一个data table看起来像这样 id A1g hi A2g hi A3g hi A4g hi 1 2 3 4 5 我想melt这张表看起来像这样 id time hi 1 1 2 1 2 3 1 3 4 1 4 5 我尝试过这样的
  • 连接 __contains 和 __in 最简单的方法是什么?

    我正在做标签搜索功能 用户可以观察很多标签 我将所有标签都放在一个元组中 现在我想找到包含列表中至少一个标签的所有文本 象征性 text contains in asd dsa 我唯一的想法是循环 例如 q text objects all
  • “分段错误”与“运行时”错误? [复制]

    这个问题在这里已经有答案了 考虑一下这段代码片段 char str hellow Ghost str 0 z printf s str 这是一个分段错误 它还会出现运行时内存错误吗 我对分段错误的理解是 当您访问不属于您的内存时出现分段错误
  • Spring Boot 无法拦截执行器访问

    在Spring Boot 2 1 6版本中无法拦截访问执行器请求现在我有一个全局拦截器 Component public class ServiceFilter implements HandlerInterceptor log4j sta
  • 提升以固定单子变压器堆栈的“内部”

    假设我有一个IO Int包裹在一个StateT MyState 那么我的值为State MyState Int我想在堆叠单子中使用它 我如何在这种内在的意义上提升它 我已经知道使用lift or liftIO如果我得到与内部兼容的东西 我只
  • 编译为字节码,Java 与 Python。造成所用时间差异的原因是什么? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 Java 和 python 仅谈论 CPython 都分别解释为 Java 和 CPython 字节码 然后 两个字节码都由各自的虚拟机 JVM 和 Cpython VM 解释
  • C#:使用字节数组创建位图

    我正在尝试使用以下代码使用字节数组动态创建位图图像 Bitmap GetImage IntPtr ip Marshal AllocCoTaskMem imagesize some code to fill ip Image img new
  • 如何在 iOS 13 中的 Swift 中立即更改状态栏文本颜色

    我正在使用 Swift 5 1 和 Xcode 11 1 目前我已经完成了深色模式设计的实现 用户使用此代码在设置页面中更改主题样式后 主题会立即更新 guard let appDelegate UIApplication shared d
  • 从 TextBox 继承的 vb .NET 自定义控件不会触发 Paint 事件

    我需要一个始终被禁用的多行文本框 但它不应该将自己涂成灰色 但我想保留其设计者选择的颜色 我以前对始终黑色标签 无多行 有相同的要求 因此我从 Label 继承 例如 Imports System ComponentModel Public