gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:33:34 25 4
gpt4 key购买 nike

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

我以前对始终黑色标签(无多行)有相同的要求,因此我从 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

它按预期工作完美:)

关于vb.net - 从 TextBox 继承的 vb .NET 自定义控件不会触发 Paint 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3564273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com