none
problem mit checklistbox

    Frage

  • Nachtrag!

    AchsauswahlZumGlätten ist in diesem Fall die ChekListbox mit den sechs items zur auswahl

    Hallo Leute,

    vorab, ich bin blutiger anfänger was VB betrifft.

    Ich bin gerade richtig am verzweifeln. Ich habe mit der toolbox eine checklistbox erstellt mit sechs auswahlmöglichkeiten. Diese versuche ich nun in einem Programm aufzurufen sodaß der Benutzer seine auswahl trifft. Und genau hier hakt es schon. Ich habe keine Ahnung wie ich diese checklistbox aus einem anderen sub aufrufen kann so dass der benutzer eine auswahl trifft. Mit checklistbox.show geht es nicht da auf keine Eingabe gewartet wird und das sub wird beendet.

    Hier ein kleiner auszug:

    Dim selectedCellCount As Integer = dgv_dat.GetCellCount(DataGridViewElementStates.Selected)
    
    If selectedCellCount > 2 Then 'es müssen mindestens drei Punkte markiert sein!
    
        If dgv_dat.AreAllCellsSelected(True) Then
    
            MessageBox.Show("All cells are selected", "Selected Cells")
    
        Else
    
            Dim sb As New System.Text.StringBuilder()
    
            Dim i As Integer
            Dim c(selectedCellCount) As Single
            Dim x1 As Single = 0
            Dim x2 As Single = 0
            Dim y1 As Single = 0
            Dim y2 As Single = 0
            Dim z1 As Single = 0
            Dim z2 As Single = 0
            Dim Zeile(selectedCellCount - 1) As Integer
            Dim Gesamtstrecke As Single = 0
    
    
            For i = 0 To selectedCellCount - 1
                Zeile(i) = dgv_dat.SelectedCells(i).RowIndex ' Zeilennummern (rowindex) werden zuerst ermittelt
            Next i
    
            If Zeile(0) > Zeile(selectedCellCount - 1) Then 'Je nachdem wie man markiert hat ist die erste Zeile die Letzte Zeile. Deswegen wird anschliesend in der For schleife rückwärts gezählt
                For i = selectedCellCount - 1 To 0 Step -1
                    If i = selectedCellCount - 1 Then
                        x1 = dgv_dat.Rows(Zeile(i)).Cells(3).Value
                        y1 = dgv_dat.Rows(Zeile(i)).Cells(4).Value
                        z1 = dgv_dat.Rows(Zeile(i)).Cells(5).Value
                    Else
                        x2 = dgv_dat.Rows(Zeile(i)).Cells(3).Value
                        y2 = dgv_dat.Rows(Zeile(i)).Cells(4).Value
                        z2 = dgv_dat.Rows(Zeile(i)).Cells(5).Value
                        c(i) = Math.Sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2)
                        Gesamtstrecke = Gesamtstrecke + c(i)
    
                        x1 = x2
                        y1 = y2
                        z1 = z2
    
    
                    End If
                Next i
    
            Else
                For i = 0 To selectedCellCount - 1 'hier ist die erste Zeile die erste Zeile. Deswegen wird anschliesend in der For schleife vorwärts gezählt
                    If i = 0 Then
                        x1 = dgv_dat.Rows(i).Cells(3).Value
                        y1 = dgv_dat.Rows(i).Cells(4).Value
                        z1 = dgv_dat.Rows(i).Cells(5).Value
                    Else
                        x2 = dgv_dat.Rows(i).Cells(3).Value
                        y2 = dgv_dat.Rows(i).Cells(4).Value
                        z2 = dgv_dat.Rows(i).Cells(5).Value
                        c(i) = Math.Sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2 + (z2 - z1) ^ 2)
                        Gesamtstrecke = Gesamtstrecke + c(i)
    
                        x1 = x2
                        y1 = y2
                        z1 = z2
    
                        TextBox3.Show()
                        AchsauswahlZumGlätten.Show()
                        WhatIsChecked()
    
    
                    End If
                Next i
    
            End If
    
    
    
        End If
    Else
        MessageBox.Show("Bitte markieren Sie mindestens drei Punkte. Markieren Sie dabei die Punktnamen!")
    
    End If
    
    TextBox3.Show()
    AchsauswahlZumGlätten_SelectedIndexChanged(sender, e)
    AchsauswahlZumGlätten.Show()
    
    MsgBox("Bitte auswählen")
    'TextBox3.Hide()
    'AchsauswahlZumGlätten.Hide()

    Es muss nicht unbedingt eine checklistbox sein. Es könnte auch etwas ähnliches wie eine msgbox mit auswahlmöglichkeiten sein.

    Dienstag, 13. Februar 2018 15:02

Antworten

  • Hi,
    für die Auswahl/Anzeige der CheckBoxes solltest Du ein Formular aufbauen, dessen Instanz Du nit ShowDialog anzeigen lässt. Vor dem ShowDialog kannst Du in der Instanz Anfangswerte setzen, die dann im FormLoad zugewiesen werden können. Zum FormClosing kannst Du die Werte wieder aus den CheckBoxes auslesen. Als Datenpuffer können Eigenschadten im Formular genutzt werden.


    Hier eine mögliche FDemo:

    Haupt-Form, die den Dialog aufruft:

    Public Class Form35
    
      ' Befehlsschaltfläche für den Aufruf des Dialog Form
      Private WithEvents btn As New Button With {.Text = "Start Dialog", .Dock = DockStyle.Top}
      ' ListBox zur Anzeige des Ergenisses
      Private lb As New ListBox With {.Dock = DockStyle.Fill}
      ' Liste mit den Daten
      Private liste As New List(Of Form35Data)
    
      Private Sub Form35_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Steuerlemente anzeigen
        Me.Controls.AddRange(New Control() {lb, btn})
        ' Daten erzeugen
        For i = 1 To 5
          liste.Add(New Form35Data With {.IsChecked = False, .Info = $"Zeile {i}"})
        Next
      End Sub
    
      Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
        ' Instanz des Dialog Form
        Dim frm As New Form35a
        ' Daten übergeben (Verweis!)
        frm.Daten = liste
        ' Dialog anzeigen
        frm.ShowDialog()
        ' Kontrollanzeige
        lb.Items.Clear()
        For Each item In liste
          lb.Items.Add($"{item.IsChecked} {item.Info}")
        Next
      End Sub
    End Class
    
    ''' <summary>
    ''' Klasse für Datenobjekte
    ''' </summary>
    Public Class Form35Data
      ''' <summary>
      ''' Haken gesetzt oder nicht gesetzt
      ''' </summary>
      Public IsChecked As Boolean
      ''' <summary>
      ''' Anzeigetext in der CheckedListBox
      ''' </summary>
      Public Info As String
    End Class

    Dazu das Dialog Form:

    Public Class Form35a
      ''' <summary>
      ''' Eigenschaft für die Übernahme des verweises auf die Liste der Datenobjekte
      ''' </summary>
      Public Daten As List(Of Form35Data)
      ' anzuzeigende CheckeLiustBox
      Private cbl As New CheckedListBox With {.Dock = DockStyle.Fill}
      ''' <summary>
      ''' Laden des Form
      ''' </summary>
      ''' <param name="sender"></param>
      ''' <param name="e"></param>
      Private Sub Form35a_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Steuerlemente anzeigen
        Me.Controls.Add(cbl)
        ' Elemente der CheckedListBox aus der Liste der Datenobjekte erzeugen
        For Each item In Daten
          Dim i = cbl.Items.Add(item.Info)
          cbl.SetItemChecked(i, item.IsChecked)
        Next
      End Sub
      ''' <summary>
      ''' Entladen des Form
      ''' </summary>
      ''' <param name="sender"></param>
      ''' <param name="e"></param>
      Private Sub Form35a_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        For i = 0 To cbl.Items.Count - 1
          Daten(i).IsChecked = cbl.GetItemChecked(i)
        Next
      End Sub
    End Class

    --

    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Dienstag, 13. Februar 2018 21:20