Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB.Net] Usercontrol checkbox event ongelma

novice [13.04.2010 23:02:16]

#

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?

neau33 [14.04.2010 10:40:59]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta