【发布时间】:2010-08-25 09:01:32
【问题描述】:
我需要一个始终禁用的多行文本框,但它不应该将自身涂成灰色,但我想保持其设计者选择的颜色。
我以前对始终为黑色的标签(没有多行)有相同的要求,所以我从标签继承如下:
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
现在在 CustomControl1 - TextBox 继承 - 控件中永远不会触发 Paint 事件。
为什么我无法获得 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
但是这样,我也不能设置“真正的”启用属性,我的意思是支持字段。
【问题讨论】: