我正在尝试构建自定义属性。
当我设置属性时,我想与父对象中的对象进行交互。对于我的生活,我似乎无法弄明白。我继续犯同样的错误。
"如果没有初始化的显式实例,则无法在共享方法或成员中引用类的实例或成员"
+2^31 - 1 = +2147483647
额外信息
无论我在这里做出哪些努力(这可能是完全错误的做法,这是我本来想要做的。)
我有一个usercontrol(uc)。在我的usercontrol上,我有一个标签(l)。
我通常可以使用控件从我的表单中调用uc.l.这样我就可以直接从使用usercontrol的表单代码中与标签进行交互。
我现在要做的是,基本上"隐藏" l,(我不希望调用表单能够直接与标签交互)。
我想在uc中创建一个可访问的自定义对象,只显示2个属性。
当从调用usercontrol的表单设置这些属性时,我想从我为自定义对象创建的新属性设置器中设置原始标签的属性。
我可以很容易地在UC本身创建两个属性,一个用于(l)文本,一个用于(l)颜色。
但我在uc上有多个标签,我想为每个标签引用一个自定义对象,公开特定的自定义属性。
我希望这是有道理的。
答案 0 :(得分:1)
显然,c_heading1
意味着在某种程度上反映或控制标签。为此,只需使用实际标签作为某些新属性的支持字段:
加上新信息: 我有3个标签......我不想创建6个属性
Public Class UC
Public Property HeadingA As HeaderLabel
Public Property HeadingB As HeaderLabel
Public Property HeadingC As HeaderLabel
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
' important
HeadingA = New HeaderLabel(Label1)
HeadingB = New HeaderLabel(Label2)
HeadingC = New HeaderLabel(Label3)
End Sub
Public Class HeaderLabel
Public Property Text As String
Get
Return myLabel.Text
End Get
Set(value As String)
' do something fabulous
myLabel.Text = value
End Set
End Property
Public Property Color As Color
Get
Return myLabel.BackColor
End Get
Set(value As Color)
' do soemthing else fabulous
myLabel.BackColor = value
End Set
End Property
Private myLabel As Label
Public Sub New(lbl As Label)
myLabel = lbl
End Sub
End Class
End Class
I dont want the calling form to be able to interact with the label directly
如果您在UserControl上将Modifiers
属性设置为Private
,则表单将无法再引用它。
用法:
Uc1.HeadingA.Text = "Something Fabulous"
Uc1.HeadingA.Color = Color.AliceBlue
答案 1 :(得分:0)
我最终得到了这个。我想在这个例子中直接从_load这里调用.text和.color,但是在@Plutonix的帮助下,我认为这不可能吗?
Public Class awsumlistItem
Private new_heading1 As LabelProperties
Public Property heading1 As LabelProperties
Get
Return new_heading1
End Get
Set(ByVal value As LabelProperties)
new_heading1 = value
h1.Text = new_heading1.text
h1.color = new_heading1.color
End Set
End Property
Private new_heading2 As LabelProperties
Public Property heading2 As LabelProperties
Get
Return new_heading2
End Get
Set(ByVal value As LabelProperties)
new_heading2 = value
End Set
End Property
Private new_heading3 As LabelProperties
Public Property heading3 As LabelProperties
Get
Return new_heading3
End Get
Set(ByVal value As LabelProperties)
new_heading3 = value
End Set
End Property
Public Class LabelProperties
Public Property text() As String
Public Property color() As System.Drawing.Color
End Class
Private Sub awsumlistItem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Me.Dock = DockStyle.Fill
Dim myHeading1 As New LabelProperties
With myHeading1
.text = "blah blah"
.color = System.Drawing.Color.Aqua
End With
heading1 = myHeading1
End Sub
End Class