Usercontrollissa on checkbox jonka CheckedChanged eventti muuttaa erään toisen luokan boolean muuttujan arvoa. Kaikki toimii debuggauksessa moiteetta jos checkboxiin ei ole asetettu ruksia designerissä, mutta jos ruksi on asetettu niin pukkaapi seuraavaa virheilmoitusta:
An error occurred creating the form. See Exception.InnerException for details. The error is: The form referred to itself during construction from a default instance, which led to infinite recursion. Within the Form's constructor refer to the form using 'Me.'
Syynkin virheilmoitukseen luulen tietäväni; Vastaavan ongelman kanssa painittuani jokin aika sitten. Eli CheckedChanged eventti laukeaa jo checkboxin luontivaiheessa, eikä tätä erästä toista luokkaa ole vielä ehditty esitellä.
Mitenkä siis ratkaisen ongelman?
NO MORJENS taas novice!
napaa se boolean arvo suoraan siitä CheckBoxin .Checked arvosta
Public Partial Class MainForm
Public Shared chkBox As Object = Nothing
Public Sub New()
Me.InitializeComponent()
End Sub
Sub MainFormLoad(sender As Object, e As EventArgs)
For Each ctl As Control In Me.Controls
If TypeOf(ctl) Is UserControl Then
For Each child As Control In ctl.Controls
If TypeOf(child) Is CheckBox Then
chkBox = child: Exit For
End If
Next
Exit For
End If
Next
'SAMA ASIA HIEMAN ERI TAVALLA...
'huomaa että userControl1'n esimmäinen
'ilmentymä saa nimekseen userControl11
'kun se tuodaan formille
'Try
'chkBox = _
'Me.Controls("userControl11") _
'.Controls("CheckBox1")
'Catch ex As Exception
'End Try
End Sub
Sub Button1Click(sender As Object, e As EventArgs)
'Testi
If Not chkBox Is Nothing Then
MsgBox(chkBox.Checked)
End If
End Sub
End Classtoinen mahdollisuus on asettaa UserControl luokkaan julkinen ominaisuus
Public Partial Class UserControl1
Inherits System.Windows.Forms.UserControl
Public Sub New()
Me.InitializeComponent()
End Sub
Sub UserControl1Load(sender As Object, e As EventArgs)
chkBoxChecked = CheckBox1.Checked
End Sub
Sub CheckBox1CheckedChanged(sender As Object, e As EventArgs)
chkBoxChecked = sender.Checked
End Sub
Private IsChecked As Boolean
Public Property chkBoxChecked() As Boolean
Get
Return IsChecked
End Get
Set(value As Boolean)
IsChecked = value
End Set
End Property
End ClassPublic Partial Class MainForm
Public Sub New()
Me.InitializeComponent()
End Sub
Sub Button1Click(sender As Object, e As EventArgs)
'Testi
MsgBox(userControl11.chkBoxChecked)
End Sub
End ClassAihe on jo aika vanha, joten et voi enää vastata siihen.