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 Class
toinen 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 Class
Public 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 Class
Aihe on jo aika vanha, joten et voi enää vastata siihen.