2016-07-18 13 views
1

Ich habe ein Formular mit CheckBox und RadioButton Kontrollen. Wenn Leute auf die Knöpfe/Kästchen klicken, werden die Ergebnisse in meiner Datenbank gespeichert. Später möchte ich vielleicht, dass jemand anderes das Formular abruft und Änderungen vornimmt oder es weiter verwendet.Wie markiere ich ein Optionsfeld als überprüft, ohne dass eine Aktion ausgeführt wurde?

Wenn ich die Informationen aus der Datenbank in ein neues "Such" -Formular zurückverwandele (das genau so aussieht wie das Formular, das zum Übermitteln der Daten verwendet wird), sollen die Optionsfelder den Zustand wiedergeben, in dem sie sich befanden Gerettet. Wenn also eine Box beim Speichern TRUE (markiert) wurde, möchte ich, dass sie auf dem neuen Formular TRUE (markiert) anzeigt.

JEDOCH wenn ich

radiobutton.checked = True 

Es macht meine Taste markieren, wie geprüft .... es wirkt auch wie die Taste erneut geklickt wurde. Also habe ich doppelte Ergebnisse in meiner Datenbank. Es wird dies jedes Mal tun, wenn das Formular geöffnet wird.

Also, ich möchte eine Möglichkeit, die Box als markiert markiert (der Zustand, in dem es war, wenn gespeichert), aber nicht das Ereignis erneut verursachen.

Hier ist ein Beispiel:

str = "SELECT * from OpenEvents WHERE EventID = " & eventId & "" 
    Dim cmd6 As OleDbCommand = New OleDbCommand(str, myConnection) 
    dr = cmd6.ExecuteReader() 
    While dr.Read() 
     contactType = dr("ContactType").ToString 
     abend = dr("Abend").ToString 
     paged = dr("Paged").ToString 
     shortSummary = dr("ShortSummary").ToString 
     eventNotes = dr("EventNotes").ToString 
     impacting = dr("Impacting").ToString 
     L1Engaged = dr("L1Engaged").ToString 
     L2Engaged = dr("L2Engaged").ToString 
     managerEngaged = dr("ManagerEngaged") 
     IncTicket = dr("IncTicket").ToString 
    End While 
    myConnection.Close() 

    If contactType = "Call" Then 
     CallRadioButton.Checked = True 
    ElseIf contactType = "IM" Then 
     IMRadioButton.Checked = True 
    ElseIf contactType = "Other" Then 
     OtherRadioButton.Checked = True 
    ElseIf contactType = "Alert" Then 
     AlertRadioButton.Checked = True 
    Else 
    End If 

    If abend = "True" Then AbendCheckBox.Checked = True 
    If paged = "True" Then PagedYes.Checked = True 
    ShortSummaryTextBox.Text = shortSummary 
    DetailsTextBox.Text = eventNotes 
    If impacting = "True" Then ImpactingYesRadioButton.Checked = True 
    If L1Engaged = "True" Then L1YesRadioButton.Checked = True 
    If L2Engaged = "True" Then L2YesRadioButton.Checked = True 
    If managerEngaged = "True" Then ManagerYesRadioButton.Checked = True 
    IncTicketTextBox.Text = IncTicket 
+4

Ich schlage vor, Sie erstellen einen booleschen Wert für das Load-Ereignis verwendet werden. Starten Sie es als wahr und ändern Sie das Ergebnis nach false, wenn das Laden des Formulars abgeschlossen ist. Und bei jeder Funk-/Prüfaktion verifizieren Sie den Wert des booleschen Wertes und verlassen die Untereinheit, wenn das Formular geladen ist. – Abner

Antwort

0

Sie könnten Click Ereignis statt CheckedChanged Ereignis verwenden.

Wenn Sie das Ereignis, das mit dem RadioButton verknüpft ist, auslösen möchten, können Sie PerformClick statt Checked = True verwenden.

Wenn Sie den aktivierten Status ändern möchten, ohne das Ereignis zu erhöhen, können Sie Checked = True verwenden.

Hier ein kleines Beispiel:

Private Sub RadioButton1_Click(sender As Object, e As EventArgs) Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click 
    Select Case sender.name 
     Case Is = "RadioButton1" 
      Me.Label1.BackgroundColor = Color.Yellow 
      Me.Label2.BackgroundColor = Color.Gray 
      Me.Label3.BackgroundColor = Color.Gray 
     Case Is = "RadioButton2" 
      Me.Label1.BackgroundColor = Color.Gray 
      Me.Label2.BackgroundColor = Color.Yellow 
      Me.Label3.BackgroundColor = Color.Gray 
     Case Is = "RadioButton3" 
      Me.Label1.BackgroundColor = Color.Gray 
      Me.Label2.BackgroundColor = Color.Gray 
      Me.Label3.BackgroundColor = Color.Yellow 
    End Select 
End Sub 

Private Sub Btn_ChangeSelected_Click(sender As Object, e As EventArgs) Handles Btn_ChangeSelected.Click 
    Me.RadioButton1.Checked = True 
End Sub 

Private Sub Btn_PerformClick_Click(sender As Object, e As EventArgs) Handles Btn_PerformClick.Click 
    Me.RadioButton1.PerformClick() 
End Sub 

Wenn Sie auf Btn_ChangeSelected RadioButton1 geprüft werden, aber kein Ereignis ausgelöst wird.

Wenn Sie auf Btn_PerformClick klicken, wird RadioButton1 aktiviert und das Ereignis RadioButton1.click wird ausgelöst.

+0

Ich habe das getan, wie Sie oben in meinem Code sehen. Egal, was ich probiert habe, wenn ich checked = True verwendet habe, hat es immer auch das Ereignis ausgelöst. Ich habe meinen Code aus dem CheckedChanged-Ereignis in ein MouseClick-Ereignis verschoben. Ich habe das verwendet, weil es das Sub-Objekt ist, das erstellt wurde, als ich auf das Steuerelement aus der Design-Ansicht geklickt habe. Lektion gelernt. Danke für die Information! – Doonze

+0

@Doonze Es ist genau so. Wenn Sie das 'RadioButton.Click' -Ereignis verwenden, um einen Sub-Befehl auszuführen, können Sie den aktivierten Status des RadioButton ohne Effekte ändern, aber Sie können das Sub-Register weiterhin mit' RadioButton.PerformClick' ausführen. Darüber hinaus können Sie mehr 'RadioButton.Click' mit dem gleichen Sub verarbeiten, während dies mit dem' RadioButton.CheckedChanged' Event nicht möglich ist, da der Code zweimal ausgeführt würde (einer für den nicht ausgewählten RadioButton und ein anderer für den ausgewählten RadioButton). – genespos

0

Ich würde den Zustand der Radiobuttons in Form Abschlussveranstaltung zu My.Settings speichern, und wieder auf dem Formularladeereignis lesen. Auf diese Weise behalten Sie die letzten Einstellungen Ihrer Radiobuttons vor Verlassen des Programms bei.

+0

Ich glaube, dass das "CheckChanged" -Ereignis dennoch ausgelöst wird, obwohl –

+0

Ja tut, also sollte die Logik im CheckedChanged-Ereignis gehen. Verwenden Sie einen booleschen Wert und legen Sie ihn zum ersten Mal fest. Beim Ereignis form load wird nur der boolesche Wert festgelegt, damit das nächste Mal alles erledigt wird. – minimalist

+0

Während es ausgelöst wird, habe ich jetzt keinen Code im CheckedChanged-Ereignis, also tut es einfach nichts. So funktioniert es genau so wie ich es brauche! Aufgrund der Art und Weise, wie dies verwendet werden kann, und dass mehrere Personen das gleiche Formular zur gleichen Zeit geöffnet haben können, ist eine Einstellungsdatei nicht meine beste Lösung. Aber das ist eine großartige Idee! – Doonze

0

Einfach in eine Antwort zu drehen:

einen boolean Erstellen auf Formularladeereignis verwendet werden. Starten Sie den Wert standardmäßig als "true". Wenn der Ladevorgang abgeschlossen ist, legen Sie den Wert auf "false" fest.

Bei jedem Radio/Check-Ereignis überprüfen Sie den Wert, wenn es wahr ist, verlassen Sie einfach das Sub, ansonsten tun Sie, was auch immer es tun soll.

Mit freundlichen Grüßen.

0

In meinem Fall endete ich von meinem Code nach oben bewegt

_CheckedChanged 

Ereignis, dass der Standard war, wenn sie auf die Steuerung von Entwurfsansicht klicken, auf ein Ereignis

_MouseClick 

. Löste alle meine Probleme. Scheint, es war ein bisschen albern, das war die Vorgabe, aber Lektionen gelernt. Und alle arbeiten so, wie ich jetzt brauche.

Danke für alle Eingabe !!!