Montag, Januar 27, 2020

Deaktivieren vb.net Checkboxen

Ich habe eine grundlegende Frage, über Vb.net.

Ich habe ein Formular, sagen Sie „Form1“, auf welches eine checkbox „CheckBox1“ löst das pop-up von einem anderen Formular (z.B. „Form2“). Form2 hat eine Schaltfläche „Abbrechen“ (sagen, „Button1“) schließt Form2 und deaktiviert „CheckBox1“ auf Form1.

Form2 „Abbrechen“ – button code ist :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        
    Me.DialogResult = DialogResult.Cancel
    Form1.CheckBox1.CheckState = 0
    End Sub

Es funktioniert, aber ich habe ein problem, wenn Sie versuchen, das gleiche zu tun mit einer Dritten form („Form3“) ausgelöst, die von einem anderen CheckBox1 auf Form2, trotz Form3 „Abbrechen“ – button ist zwar codiert die gleiche Weise in Form3 :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        
    Me.DialogResult = DialogResult.Cancel
    Form2.CheckBox1.CheckState = 0
    End Sub

Wenn ich MsgBox(Form2.CheckBox1.CheckState) in Form3 code, ist es immer „0“, trotz der „1“ wenn ich MsgBox („CheckBox1.CheckState) in Form2.

Sorry für diese noob Frage, aber ich kann nicht sehen keine Erklärung.
Vielen Dank im Voraus wenn jemand mir helfen kann.

InformationsquelleAutor user3094822 | 2014-03-11

1 Kommentar

  1. 0

    Erstens, Schalten Sie Option Strict Auf, und ändern Sie Ihre CheckState Zuordnungen zu den richtigen Enumeration anstelle von 0 oder 1.

    Zweitens sollten Sie vermeiden, die Einstellung der Eigenschaften der Steuerelemente, die auf verschiedenen Formen.

    Können Sie mit der return-Wert von ShowDialog um zu bestimmen, ob der OK-oder der Abbrechen-Schaltfläche geklickt wurde, die auf einem Formular.

    Also, was würden Sie tun, ist geben Sie das Ergebnis mit dem Wert des OK-und Abbrechen-Schaltflächen in Form2 wie diese:

        btnOK.DialogResult = Windows.Forms.DialogResult.OK
        btnCancel.DialogResult = Windows.Forms.DialogResult.Cancel

    Stellen Sie sicher, fügen Sie den code in Form2 um das Formular zu schließen wenn diese angeklickt werden:

    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
        Me.Close()
    End Sub
    
    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        Me.Close()
    End Sub

    Dann in Form1 rufen Sie Form2.ShowDialog und untersuchen Sie die DialogResult-Wert, um zu sehen, welche Schaltfläche geklickt wurde:

        Dim result = Form2.ShowDialog
        If result = Windows.Forms.DialogResult.OK Then
            'ok button was clicked
            CheckBox1.CheckState = CheckState.Checked
        ElseIf result = Windows.Forms.DialogResult.Cancel Then
            'cancel button was clicked
            CheckBox1.CheckState = CheckState.Unchecked
        End If

    Als alternative, die Form1-code können werden drastisch vereinfacht, wenn Sie glücklich sind, mit der Logik, so etwas wie dieses:

    CheckBox1.Checked = (Form2.ShowDialog = Windows.Forms.DialogResult.OK)
    • Danke für deine Antwort. Leider änderte ich die Strict Option auf „on“ und folgte Ihren Ratschlägen, aber mein problem ist immer noch hier. Sehr frustrierend.
    • Also meine Frage würde : wie machen Sie auf deaktivieren Sie ein Kontrollkästchen in einem Formular, weil Sie überprüft haben, eine Abbrechen-Schaltfläche in einem anderen Formular ?
    • Siehe meine Antwort. Ich habe erweitert, was ich vor um es klarer
    • Ein großes „Dankeschön“. Es funktioniert perfekt. Wenn ich Ihr Profil sehen, ich verstehe, warum Sie empfehlen, zu wechseln „Option Strict“ auf… Mein problem war schließlich streng genug, wie üblich bei der Codierung. Aber mein erste Weg war die Arbeit bis jetzt… ich bin aber überrascht zu sehen, dass das, was funktioniert, mit der „Haupt“ – Formular nicht mehr funktionieren, wenn die kaskadierenden Sie. Vielen Dank jedenfalls für die Zeit genommen, um zu helfen einen Anfänger wie mich. Das ist sehr, sehr nett von dir. Einen guten Tag haben.

Kostenlose Online-Tests