none
Text aus Combobox soll leeres Label finden und Text übertragen RRS feed

  • Frage

  • hey ho

    ich habe mit VB Express 2010 ein Programm erstellt

    Dort befinden sich:

    1. 14 Comboboxen
    2. 2 Button (+ ; - ) für jede Combobox
    3. einige Labels

    in den Comboboxen stehen einige Dropdown-Punkte zur auswahl

    wenn der "+" Button geklickt wird soll der text aus einer Combobox in ein leeres label-Element übetragen werden(und kein Label-Element mit Text überschrieben werden)

    also z.B.: Wenn in Label1 sich Text befindet soll der Text aus Combobox1 in Label2 kopiert werden, wenn sich in Label2 Text befindet soll der Text aus Combobox1 in Label3 kopiert werden usw.

     

    habe schon eines probiert und ein paar seiten durchblättert jedoch nichts dazu gefunden (vlt. hab ich auch einfach nur ne Hirn-Blockade^^)

     

    peace

    Ralle

     

     

    Mittwoch, 1. September 2010 13:08

Antworten

  • Hallo,

    dass passiert, weil die Auswertung unabhängig davon erfolgt, ob das vorherige If erfüllt ist oder nicht.

    Damit Du weniger Code Schreiben mußt, solltest Du Dir eine Methode einbauen,  wie z. B. folgende:

      Private Sub SetLabelText(ByVal combo As ComboBox)
        For Each labelControl In New Label() {Me.Label1, Me.Label2, Me.Label3, Me.Label4}
          If String.IsNullOrEmpty(labelControl.Text) Then
            labelControl.Text = combo.Text
    
            ' Fertig
            Exit For
          End If
        Next
      End Sub
    
    

    was die Frage offenlässt, was passiert wenn alle Texte besetzt sind (derzeit nichts).

    das reduziert die Click Handler auf z. B.:

      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
         SetLabelText(me.ComboBox1)
      End Sub
     
    
    P. S.: Noch mehr reduzieren könntest Du den Code in dem Du Buttons/Label/ComboxBox
    in einer Auflistung verwaltest - aber darüber lasse ich Dich zunächst selbst nachdenken ;-)

    Gruß Elmar

    • Als Antwort markiert Ralle10 Mittwoch, 1. September 2010 17:44
    Mittwoch, 1. September 2010 15:58
  • Hallo,

    ich habe mit VB Express 2010 ein Programm erstellt

    Dort befinden sich:

    1. 14 Comboboxen
    2. 2 Button (+ ; - ) für jede Combobox
    3. einige Labels

    in den Comboboxen stehen einige Dropdown-Punkte
    zur auswahl

    Na ja, genau dafür hat man ja ComboBoxen. ;-)

    wenn der "+" Button geklickt wird soll der text aus einer
    Combobox in ein leeres label-Element übetragen
    werden(und kein Label-Element mit Text überschrieben
    werden)

    also z.B.: Wenn in Label1 sich Text befindet soll der Text
    aus Combobox1 in Label2 kopiert werden, wenn sich in
    Label2 Text befindet soll der Text aus Combobox1 in
    Label3 kopiert werden usw.

    Und wozu dienen die Minus-Buttons?

    Hier mal ein Beispiel zum Spielen.
    Kopiere den nachfolgenden Code einfach in ein leeres
    Formmodul (Form1.vb)

    ' / Beginn Code
    Public Class Form1
        Private Combos As List(Of ComboBox)
        Private Labels As List(Of Label)
        Private PlusButtons As List(Of Button)
        Private MinusButtons As List(Of Button)

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                ) Handles MyBase.Load

            CreateControls()
            FillCombos()
        End Sub

        Private Sub CreateControls()
            Dim i As Integer
            Dim Cbo As ComboBox
            Dim Lbl As Label = Nothing
            Dim Btn As Button
            Dim H As Integer

            Dim BFont As Font = _
                New Font("Arial", 10, FontStyle.Bold)

            Dim Y As Integer = 10
            Dim X As Integer = 10

            For i = 1 To 6
                Cbo = New ComboBox
                With Cbo
                    .Name = "Combo" & i.ToString
                    .Font = New Font("Arial", 14)
                    .SetBounds(X, Y, 150, .Height)

                    X = .Right + 5
                    H = .Height
                End With
                Me.Controls.Add(Cbo)

                Btn = New Button
                With Btn
                    .Name = "btnPlus" & i.ToString
                    .Font = BFont
                    .Text = "+"
                    .SetBounds(X, Y, H, H)

                    X = .Right + 3
                End With
                Me.Controls.Add(Btn)
                AddHandler Btn.Click, AddressOf Button_Click

                Btn = New Button
                With Btn
                    .Name = "btnMinus" & i.ToString
                    .Font = BFont
                    .Text = "-"
                    .SetBounds(X, Y, H, H)
                End With
                Me.Controls.Add(Btn)

                X = 10
                Y = Cbo.Bottom + 20
            Next

            X = Me.Controls("btnMinus1").Right + 15
            Y = 10
            For i = 1 To 10
                Lbl = New Label
                With Lbl
                    .Name = "Label" & i.ToString
                    .AutoSize = True
                    .BorderStyle = BorderStyle.Fixed3D
                    H = .Height
                    .Text = ""
                    .AutoSize = False
                    .SetBounds(X, Y, 150, H)

                    Y = .Bottom + 5
                End With
                Me.Controls.Add(Lbl)
            Next

            Me.ClientSize = New Size(Lbl.Right + 10, Lbl.Bottom + 20)
        End Sub

        Private Sub FillCombos()
            Dim i As Integer
            Dim List1() As String = _
                    New String() _
                    {"Hund", "Katze", "Maus", _
                     "Tiger", "Elefant", "Vogel", "Fisch"}

            For i = 1 To 12
                Select Case i
                    Case 1 To 7
                        DirectCast _
                                (Me.Controls("Combo1"),  _
                                ComboBox).Items.Add(List1(i - 1))

                        DirectCast _
                                (Me.Controls("Combo2"),  _
                                ComboBox).Items.Add(WeekdayName(i, False))

                        DirectCast _
                                (Me.Controls("Combo4"),  _
                                ComboBox).Items.Add(List1(i - 1))

                        DirectCast _
                                (Me.Controls("Combo5"),  _
                                ComboBox).Items.Add(WeekdayName(i, False))
                End Select

                DirectCast _
                        (Me.Controls("Combo3"),  _
                        ComboBox).Items.Add(MonthName(i, False))

                DirectCast _
                        (Me.Controls("Combo6"),  _
                        ComboBox).Items.Add(MonthName(i, False))
            Next

            Dim Rnd As New Random(Now.Millisecond)
            Dim C As Control
            For Each C In Me.Controls
                If TypeOf (C) Is ComboBox Then
                    DirectCast(C, ComboBox).SelectedIndex = Rnd.Next(0, 7)
                End If
            Next
        End Sub

        Private Sub Button_Click _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs)
            Dim Found As Boolean
            Dim i As Integer
            Dim Cbo As ComboBox
            Dim Lbl As Label
            Dim Btn As Button = DirectCast(sender, Button)

            Dim NumBtn As Integer = _
                    CInt(Btn.Name.Substring(Btn.Name.Length - 1, 1))

            Cbo = _
                DirectCast _
                (Me.Controls("Combo" & NumBtn.ToString), ComboBox)

            For i = 1 To 10
                Lbl = _
                    DirectCast _
                    (Me.Controls("Label" & i.ToString), Label)

                If Lbl.Text.Length < 1 Then
                    Lbl.Text = Cbo.Text
                    Found = True
                    Exit For
                End If
            Next

            If Not Found Then
                Dim C As Control

                If MsgBox("Labels löschen?", _
                        MsgBoxStyle.Question Or MsgBoxStyle.YesNo) _
                        = MsgBoxResult.Yes Then

                    For Each C In Me.Controls
                        If TypeOf (C) Is Label Then
                            C.Text = ""
                        End If
                    Next
                End If
            End If
        End Sub
    End Class
    ' \\\ E N T E

    Das Beispiel arbeitet der Einfachheit halber mit nur 6
    ComboBoxen. Die Anzahl dieser ComboBoxen kannst
    Du für Deine Zwecke beliebig erhöhen.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    • Als Antwort markiert Ralle10 Mittwoch, 1. September 2010 17:44
    Mittwoch, 1. September 2010 16:32

Alle Antworten

  • Hey Ralle,

    ich versuche mal deine Übung zu verstehen.

    Mach es doch genauso, wie du es beschrieben hast:

    If Label1.Text = "" then Label1.Text = <Inhalt der ComboBox>
    If Label2.Text = "" then Label2.Text = <Inhalt der ComboBox>
    If Label3.Text = "" then Label3.Text = <Inhalt der ComboBox>
    If Label4.Text = "" then Label4.Text = <Inhalt der ComboBox>
    

    Ist zwar kein perfekter Code, aber du erhälst ein Ergebnis.

    mfg

    Mittwoch, 1. September 2010 13:23
  • erstmal danke für die schnelle antwort

    so ungefähr hatte ich es schon einmal jedoch wird dann in diesen 4 Labels der Text aus der Combobox angezeigt

    hier erstmal der code:

    Public Class Form1

      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click


            If Label1.Text = "" Then Label1.Text = ComboBox1.Text
            If Label2.Text = "" Then Label2.Text = ComboBox1.Text
            If Label3.Text = "" Then Label3.Text = ComboBox1.Text
            If Label4.Text = "" Then Label4.Text = ComboBox1.Text


        End Sub


        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            If Label1.Text = "" Then Label1.Text = ComboBox2.Text
            If Label2.Text = "" Then Label2.Text = ComboBox2.Text
            If Label3.Text = "" Then Label3.Text = ComboBox2.Text
            If Label4.Text = "" Then Label4.Text = ComboBox2.Text
        End Sub
    End Class

     

    so wird ja nur der inhalt aus der combobox in 4 labels kopiert 

    der inhalt einer combobox soll jedoch nur in ein freies Label kopiert werden wenn ein button angeklickt wird

    trotzdem danke

    Mittwoch, 1. September 2010 14:59
  • Hallo,

    dass passiert, weil die Auswertung unabhängig davon erfolgt, ob das vorherige If erfüllt ist oder nicht.

    Damit Du weniger Code Schreiben mußt, solltest Du Dir eine Methode einbauen,  wie z. B. folgende:

      Private Sub SetLabelText(ByVal combo As ComboBox)
        For Each labelControl In New Label() {Me.Label1, Me.Label2, Me.Label3, Me.Label4}
          If String.IsNullOrEmpty(labelControl.Text) Then
            labelControl.Text = combo.Text
    
            ' Fertig
            Exit For
          End If
        Next
      End Sub
    
    

    was die Frage offenlässt, was passiert wenn alle Texte besetzt sind (derzeit nichts).

    das reduziert die Click Handler auf z. B.:

      Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
         SetLabelText(me.ComboBox1)
      End Sub
     
    
    P. S.: Noch mehr reduzieren könntest Du den Code in dem Du Buttons/Label/ComboxBox
    in einer Auflistung verwaltest - aber darüber lasse ich Dich zunächst selbst nachdenken ;-)

    Gruß Elmar

    • Als Antwort markiert Ralle10 Mittwoch, 1. September 2010 17:44
    Mittwoch, 1. September 2010 15:58
  • Hallo,

    ich habe mit VB Express 2010 ein Programm erstellt

    Dort befinden sich:

    1. 14 Comboboxen
    2. 2 Button (+ ; - ) für jede Combobox
    3. einige Labels

    in den Comboboxen stehen einige Dropdown-Punkte
    zur auswahl

    Na ja, genau dafür hat man ja ComboBoxen. ;-)

    wenn der "+" Button geklickt wird soll der text aus einer
    Combobox in ein leeres label-Element übetragen
    werden(und kein Label-Element mit Text überschrieben
    werden)

    also z.B.: Wenn in Label1 sich Text befindet soll der Text
    aus Combobox1 in Label2 kopiert werden, wenn sich in
    Label2 Text befindet soll der Text aus Combobox1 in
    Label3 kopiert werden usw.

    Und wozu dienen die Minus-Buttons?

    Hier mal ein Beispiel zum Spielen.
    Kopiere den nachfolgenden Code einfach in ein leeres
    Formmodul (Form1.vb)

    ' / Beginn Code
    Public Class Form1
        Private Combos As List(Of ComboBox)
        Private Labels As List(Of Label)
        Private PlusButtons As List(Of Button)
        Private MinusButtons As List(Of Button)

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                ) Handles MyBase.Load

            CreateControls()
            FillCombos()
        End Sub

        Private Sub CreateControls()
            Dim i As Integer
            Dim Cbo As ComboBox
            Dim Lbl As Label = Nothing
            Dim Btn As Button
            Dim H As Integer

            Dim BFont As Font = _
                New Font("Arial", 10, FontStyle.Bold)

            Dim Y As Integer = 10
            Dim X As Integer = 10

            For i = 1 To 6
                Cbo = New ComboBox
                With Cbo
                    .Name = "Combo" & i.ToString
                    .Font = New Font("Arial", 14)
                    .SetBounds(X, Y, 150, .Height)

                    X = .Right + 5
                    H = .Height
                End With
                Me.Controls.Add(Cbo)

                Btn = New Button
                With Btn
                    .Name = "btnPlus" & i.ToString
                    .Font = BFont
                    .Text = "+"
                    .SetBounds(X, Y, H, H)

                    X = .Right + 3
                End With
                Me.Controls.Add(Btn)
                AddHandler Btn.Click, AddressOf Button_Click

                Btn = New Button
                With Btn
                    .Name = "btnMinus" & i.ToString
                    .Font = BFont
                    .Text = "-"
                    .SetBounds(X, Y, H, H)
                End With
                Me.Controls.Add(Btn)

                X = 10
                Y = Cbo.Bottom + 20
            Next

            X = Me.Controls("btnMinus1").Right + 15
            Y = 10
            For i = 1 To 10
                Lbl = New Label
                With Lbl
                    .Name = "Label" & i.ToString
                    .AutoSize = True
                    .BorderStyle = BorderStyle.Fixed3D
                    H = .Height
                    .Text = ""
                    .AutoSize = False
                    .SetBounds(X, Y, 150, H)

                    Y = .Bottom + 5
                End With
                Me.Controls.Add(Lbl)
            Next

            Me.ClientSize = New Size(Lbl.Right + 10, Lbl.Bottom + 20)
        End Sub

        Private Sub FillCombos()
            Dim i As Integer
            Dim List1() As String = _
                    New String() _
                    {"Hund", "Katze", "Maus", _
                     "Tiger", "Elefant", "Vogel", "Fisch"}

            For i = 1 To 12
                Select Case i
                    Case 1 To 7
                        DirectCast _
                                (Me.Controls("Combo1"),  _
                                ComboBox).Items.Add(List1(i - 1))

                        DirectCast _
                                (Me.Controls("Combo2"),  _
                                ComboBox).Items.Add(WeekdayName(i, False))

                        DirectCast _
                                (Me.Controls("Combo4"),  _
                                ComboBox).Items.Add(List1(i - 1))

                        DirectCast _
                                (Me.Controls("Combo5"),  _
                                ComboBox).Items.Add(WeekdayName(i, False))
                End Select

                DirectCast _
                        (Me.Controls("Combo3"),  _
                        ComboBox).Items.Add(MonthName(i, False))

                DirectCast _
                        (Me.Controls("Combo6"),  _
                        ComboBox).Items.Add(MonthName(i, False))
            Next

            Dim Rnd As New Random(Now.Millisecond)
            Dim C As Control
            For Each C In Me.Controls
                If TypeOf (C) Is ComboBox Then
                    DirectCast(C, ComboBox).SelectedIndex = Rnd.Next(0, 7)
                End If
            Next
        End Sub

        Private Sub Button_Click _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs)
            Dim Found As Boolean
            Dim i As Integer
            Dim Cbo As ComboBox
            Dim Lbl As Label
            Dim Btn As Button = DirectCast(sender, Button)

            Dim NumBtn As Integer = _
                    CInt(Btn.Name.Substring(Btn.Name.Length - 1, 1))

            Cbo = _
                DirectCast _
                (Me.Controls("Combo" & NumBtn.ToString), ComboBox)

            For i = 1 To 10
                Lbl = _
                    DirectCast _
                    (Me.Controls("Label" & i.ToString), Label)

                If Lbl.Text.Length < 1 Then
                    Lbl.Text = Cbo.Text
                    Found = True
                    Exit For
                End If
            Next

            If Not Found Then
                Dim C As Control

                If MsgBox("Labels löschen?", _
                        MsgBoxStyle.Question Or MsgBoxStyle.YesNo) _
                        = MsgBoxResult.Yes Then

                    For Each C In Me.Controls
                        If TypeOf (C) Is Label Then
                            C.Text = ""
                        End If
                    Next
                End If
            End If
        End Sub
    End Class
    ' \\\ E N T E

    Das Beispiel arbeitet der Einfachheit halber mit nur 6
    ComboBoxen. Die Anzahl dieser ComboBoxen kannst
    Du für Deine Zwecke beliebig erhöhen.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    • Als Antwort markiert Ralle10 Mittwoch, 1. September 2010 17:44
    Mittwoch, 1. September 2010 16:32
  • danke ihr beiden

     

    mir ist selber noch eine lösung eingefallen (endlich)

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            If Label1.Text = "" Then
                Label1.Text = ComboBox2.Text
            ElseIf Label2.Text = "" Then
                Label2.Text = ComboBox2.Text
            ElseIf Label3.Text = "" Then
                Label3.Text = ComboBox2.Text
            ElseIf Label4.Text = "" Then
                Label4.Text = ComboBox2.Text
            ElseIf Label5.Text = "" Then
                Label5.Text = ComboBox2.Text
            ElseIf Label6.Text = "" Then
                Label6.Text = ComboBox2.Text
            ElseIf Label7.Text = "" Then
                Label7.Text = ComboBox2.Text
            ElseIf Label8.Text = "" Then
                Label8.Text = ComboBox2.Text
            ElseIf Label9.Text = "" Then
                Label9.Text = ComboBox2.Text
            ElseIf Label10.Text = "" Then
                Label10.Text = ComboBox2.Text
            ElseIf Label11.Text = "" Then
                Label11.Text = ComboBox2.Text
            ElseIf Label12.Text = "" Then
                Label12.Text = ComboBox2.Text
            ElseIf Label13.Text = "" Then
                Label13.Text = ComboBox2.Text
            End If


        End Sub

     

    wäre ja auch möglich oder?

    versuche auch gleich die methode von elmar (danke)

     

    der minus button soll den text aus den labels ausradieren

     

    nochmal kurz eine Frage:

    man darf die fertigen Programme auch an andere weiter geben bzw. veröffentlichen oder?

    und man benögt Network Frames 2.0 +  damit es läuft?

     

    vielen dank

    ralle

    PS: das "spiel" schau ich mir an wenn ich das programm geschrieben hab

     

     

    Mittwoch, 1. September 2010 17:44
  • Hallo,

    Du darfst die Programme beliebig weitergeben (oder auch verkaufen), siehe Blitz-FAQ

    Was die Installation angeht:
    Für ein Programm, das Du mit Visual Basic Express 2010 geschrieben hast,
    benötigt man im Regelfall das .NET Framework 4.0 .
    Wobei Du auch ein anderes Zielframework unter den einstellen kannst,
    was aber i. a. für neue Programme keinen Sinn gibt.

    Zum Verteilen kleinerer Projekte eignet sich der Weg über Click-Once , was Du
    in den Projekt-Eigenschaften über die Seite "Veröffentlichen" anstossen kannst.

    Gruß Elmar

    Mittwoch, 1. September 2010 18:16
  • gut danke

     

    brauch nur noch jemanden der das programm schreibt (hehe^^)

     

    ralle

    Mittwoch, 1. September 2010 18:33
  • Hallo,

    danke ihr beiden

    mir ist selber noch eine lösung eingefallen (endlich)

    Private Sub Button4_Click
            (ByVal sender As System.Object, _
             ByVal e As System.EventArgs _
            ) Handles Button4.Click

    If Label1.Text = "" Then
    Label1.Text = ComboBox2.Text
    ElseIf Label2.Text = "" Then
    Label2.Text = ComboBox2.Text
    ElseIf Label3.Text = "" Then
    Label3.Text = ComboBox2.Text
    ElseIf Label4.Text = "" Then
    Label4.Text = ComboBox2.Text
    ElseIf Label5.Text = "" Then
    Label5.Text = ComboBox2.Text
    ElseIf Label6.Text = "" Then
    Label6.Text = ComboBox2.Text
    ElseIf Label7.Text = "" Then
    Label7.Text = ComboBox2.Text
    ElseIf Label8.Text = "" Then
    Label8.Text = ComboBox2.Text
    ElseIf Label9.Text = "" Then
    Label9.Text = ComboBox2.Text
    ElseIf Label10.Text = "" Then
    Label10.Text = ComboBox2.Text
    ElseIf Label11.Text = "" Then
    Label11.Text = ComboBox2.Text
    ElseIf Label12.Text = "" Then
    Label12.Text = ComboBox2.Text
    ElseIf Label13.Text = "" Then
    Label13.Text = ComboBox2.Text
    End If

    End Sub

    wäre ja auch möglich oder?

    Ja, das wäre auch möglich, aber eine simple
    Schleife, die bis zum ersten Treffer die vorhandenen
    Labels durchläuft, ist eben doch etwas einfacher und
    übersichtlicher.
    Statt des etwas "altertümlichen" If..ElseIf-Konstrukts
    würde ich dann noch eher ein Select-Case-Konstrukt
    verwenden:

            Select Case True
                Case Label1.Text.Length < 1
                    Label1.Text = ComboBox1.text

                Case Label3.Text.Length < 1
                    Label3.Text = ComboBox1.text

                Case Label2.Text.Length < 1
                    Label2.Text = ComboBox1.text

                ... usw. ... usw
            End Select

    der minus button soll den text aus den labels ausradieren

    Aus welchen?
    Wenn er alle Labels löschen sollte, dann würde ja ein
    einziger Minus-Button genügen.

    nochmal kurz eine Frage:
    man darf die fertigen Programme auch an andere weiter
    geben bzw. veröffentlichen oder?

    Ja, natürlich darf man das.

    und man benögt Network Frames 2.0 + damit es läuft?

    Das kommt darauf an, für welches Framework Du Dein
    Projekt entwickelt hast. Bei VS2010 ist die Standardeinstellung
    FW4.0. Man kann aber auch niedrigere FW-Versionen wie z.B.
    das FW2.0 einstellen, hat dann eben auch nur den Funktions-
    umfang dieses Frameworks zur Verfügung. Für Dein einfaches
    Progrämmchen ist FW2.0 vermutlich vollkommen ausreichend
    und Du kannst dann davon ausgehen, dass dieses Framework
    auf allen Systemen ab Windows XP (sofern sie jeweils auf dem
    akt. Updatestand gehalten sind) vorhanden ist. Wenn Du Dein
    Programm dann zu einer einzigen *.exe kompilierst, brauchst
    Du auch keinerlei Installationsprozeduren. Du kopierst die *.exe
    irgendwohin auf den Zielrechner und kannst sie von direkt
    starten. In diesem Fall wäre als Speicherort für die *.exe auch
    ein einfacher USB-Stick möglich.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Mittwoch, 1. September 2010 18:58
  • Ja, das wäre auch möglich, aber eine simple
    Schleife, die bis zum ersten Treffer die vorhandenen
    Labels durchläuft, ist eben doch etwas einfacher und
    übersichtlicher.
    Statt des etwas "altertümlichen" If..ElseIf-Konstrukts
    würde ich dann noch eher ein Select-Case-Konstrukt
    verwenden

    lol

    es wäre doch dann aber auch genauso lang oder?

    ich habe hinter jedes label einen minus button gesetzt um den text aus einer einzigen zu löschen

    zusätzlich habe ich einen für alle labels

     

    wo kann man die framworks einstellen?

     

    die (hoffentlich) letzte frage:

    ich möchte das ein timer alle 100msrechnungen ausführt (z.B.: nach 100ms LabelA = LabelB * LabelC - nach 100 ms LabelA = LabelB * LabelC usw.)

     

    danke

    ralle

     

    Donnerstag, 2. September 2010 12:45
  • Hallo,

    Statt des etwas "altertümlichen" If..ElseIf-Konstrukts
    würde ich dann noch eher ein Select-Case-Konstrukt
    verwenden

    lol

    es wäre doch dann aber auch genauso lang oder?

    Ein wenig kürzer und eben etwas übersichtlicher
    wäre es schon. Ein klein wenig schneller, was
    sicher keine grosse Bedeutung hat, wäre es auch.


    ich habe hinter jedes label einen minus button gesetzt
    um den text aus einer einzigen zu löschen

    Dann müssten es aber soviele Minus-Buttons wie Labels
    sein, nicht aber soviele Minus-Buttons wie Checkboxen.

    zusätzlich habe ich einen für alle labels


    wo kann man die framworks einstellen?

    Ich habe hier leider keine Express-Version installiert.
    Bei den Vollversionen öffnet man im Projektexplorer
     "MyProjekt" und kann dann unter

        Kompilieren
            Erweiterte Kompilierungsoptionen

    das zu verwendende Framework (Zielframework) auswählen.

    die (hoffentlich) letzte frage:

    ich möchte das ein timer alle 100msrechnungen ausführt
     (z.B.: nach 100ms LabelA = LabelB * LabelC -
    nach 100 ms LabelA = LabelB * LabelC usw.)

    Ich weiss jetzt nicht so recht, was dabei Dein Problem ist.
    Geht es darum, wie Du einen Timer mit einer Intervallzeit von
    100 ms erstellst?

    Zuerst mal der Hinweis, dass LabelA, LabelB und LabelC
    eben Labels sind und keine Zahlen und man somit nicht

        LabelA = LabelB * LabelC

    rechnen kann. Man kann ja auch nicht

        Ergebnis = Hund * Panzernashorn

    rechnen.
    Schalte bei Deinen Projekteigenschaften immer "Option Explicit"
    und immer "Option Strict" ein. Intellisense sagt Dir dann schon bei
    der Codeerstellung wenn Du eine fehlerhafte oder fehlende
    Variablendeklaration hast bzw. wenn Du irgendwelche Operationen
    mit unpassenden Datentypen ausführen willst.

    Zuerst muss auf irgendeine Weise sichergestellt
    sein, dass die Texteigenschaft von LabelA und LabelB einen
    String enthält, der eine Zahl darstellt und man somit
    LabelA.Text und Label.Text zu numerischen Datentypen
    umwandeln kann. Und erst dann kann mit den so ermittelten
    Zahlenwerten gerechnet werden:

        Private Sub Calculate()
            Dim Result As Double
            Dim OprB As Double
            Dim OprC As Double

            If Double.TryParse(LabelB.Text, OprB) Then
                If Double.TryParse(LabelC.Text, OprC) Then
                    Result = OprB * OprC
                    LabelA.Text = Result.ToString
                    Exit Sub
                End If
            End If

            MsgBox _
                    (LabelB.Name & " UND " & LabelC.Name & _
                     ControlChars.CrLf & _
                    "müssen numerische Werte (Double) enthalten!", _
                    MsgBoxStyle.Exclamation)
        End Sub

    Ich verstehe nicht ganz, warum Du alle 100 ms rechnen
    willst. Wenn eine in LabelB stehende Zahl mit der in
    LabelC stehenden Zahl multipliziert worden ist, macht eine
    neue Rechnung doch erst dann Sinn, wenn sich entweder
    der Inhalt von LabelB oder der Inhalt von LabelC verändert hat,
    also z.B. dann, wenn eines der Ereignisse LabelB_TextChanged()
    oder LabelC_TextChanged ausgelöst worden ist.

    Beschreibe einfach mal etwas genauer, was konkret Du
    machen willst und wann welcher Rechenvorgang mit
    welchen Werten ausgeführt werden soll.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Donnerstag, 2. September 2010 16:05
  • ich habe nochmal nachgedacht (sollte ich öfters mal machen)

    If TextBox1.Text > "0" Then
                ZellenKO.Text = ZellenJÄ.Text * TextBox1.Text
            End If

    bin zu dieser lösung gekommen

     

     

    habe es eig so gemeint (wäre aber umständlicher)

     

    ich versuch es mal zu beschreiben:

    **Combobox****PlusButton**  **Textbox****Label         **Label2**     **Label3**

                                                          **EndLabel**

     

    Timer

     

    Combobox: wenn ein wort (z.B. Hallo) ausgewählt und der plussbutton gedrückt wurde erscheint:

    • 1. Der Text (Hallo) im Label und
    • 2. es erscheint eine an das hallo gebundende Zahl (z.B. 50) im Label2 und eine andere Zahl (z.B.  40) im Label3

    Textbox: dort steht am anfang die zahl 0  es können andere zahlen eingegeben werden

    EndLabel: Rechnung: Textbox.Text * (Label2.Text + Label3.Text) -da kein button geklickt werden soll der diese rechnung durchführt kommt ein timer zum einsatz

    Timer: er soll alle 100ms das ergebniss der rechnung erneuern - also wenn die zeit agbelaufen ist wird das ergebniss angezeigt -der timer beginnt von neuem -nach 100ms wird wieder das ergebnis neu angezeigt

    z.B.: Textbox.Text * (Label2.Text + Label3.Text)

         = 5 * (50 + 40

         =450

     

    also läuft im hintergrund ständig ein timer der die ergebnisse aktualisiert damit nicht ein button angeklickt werden muss

     

     

    vielen dank für deine denkanstöße und hilfe

    und eine tiefe verneigung von einem rasta

    ralle

     

     

     

    Donnerstag, 2. September 2010 17:50
  • Hallo,

    ich habe nochmal nachgedacht (sollte ich öfters
    mal machen)

    If TextBox1.Text > "0" Then
    ZellenKO.Text = ZellenJÄ.Text * TextBox1.Text
    End If

    bin zu dieser lösung gekommen

    Eine "Lösung" ist das nun ganz sicher nicht.
    Schalte unmbedingt mal "Option Explicit" und auch
    "Option Strict" bei Deinen Objekteigenschaften ein.

    TextBox1.Text liefert einen String und mit Strings
    kann man nicht rechnen, was ich aber doch schon
    in meiner vorangegangenen Nachricht beschrieben
    habe.

    habe es eig so gemeint (wäre aber umständlicher)

    ich versuch es mal zu beschreiben:

    *Combobox****PlusButton* **Textbox****Label *Label2* *Label3*

    *EndLabel*

    Timer


    Combobox: wenn ein wort (z.B. Hallo) ausgewählt und
    der plussbutton gedrückt wurde erscheint:

    * 1. Der Text (Hallo) im Label und

    * 2. es erscheint eine an das hallo gebundende Zahl
    (z.B. 50) im Label2 und eine andere Zahl (z.B. 40) im Label3

    Textbox: dort steht am anfang die zahl 0 es können andere
    zahlen eingegeben werden

    Falsch!
    In eine Textbox können nicht nur "andere Zahlen als 0" eingegeben
    werden, sondern auch jeder andere beliebige Text wie z.B.
    "Mäuseklavier" und das ist nun ganz bestimmt keine Zahl
    ebensowenig wie eine leere Textbox eine Zahl repräsentiert.


    EndLabel: Rechnung: Textbox.Text * (Label2.Text + Label3.Text)

    Hier rechnest Du schon wieder mit Strings, was aber eben
    nicht geht. Glaub es doch endlich mal. Zum Rechnen braucht
    man Zahlen.

    -da kein button geklickt werden soll der diese rechnung durchführt
    kommt ein timer zum einsatz

    Timer: er soll alle 100ms das ergebniss der rechnung erneuern
    - also wenn die zeit agbelaufen ist wird das ergebniss angezeigt
    -der timer beginnt von neuem -nach 100ms wird wieder das
    ergebnis neu angezeigt

    z.B.: Textbox.Text * (Label2.Text + Label3.Text)

    = 5 * (50 + 40

    =450

    also läuft im hintergrund ständig ein timer der die ergebnisse
    aktualisiert damit nicht ein button angeklickt werden muss

    Bis jetzt habe ich nicht wirklich verstanden, wie Dein
    Ablaufkonzept aussieht, bzw. was es bewirken soll.
    Ich muss mir das morgen nochmal in Ruhe ansehen,
    heute bin ich dazu offenbar schon zu müde.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Donnerstag, 2. September 2010 22:32
  • Hallo,

    ich habe nochmal nachgedacht (sollte ich öfters mal machen)

    Ja unbedingt,
    dann würdest Du nachfolgenden Code sicher
    nicht als "Lösung" bezeichnen.

    If TextBox1.Text > "0" Then
    ZellenKO.Text = ZellenJÄ.Text * TextBox1.Text
    End If

    bin zu dieser lösung gekommen

    Dass dies keine "Lösung" ist, hatte ich in meiner vorigen
    Antwort schon angemerk.

    ich versuch es mal zu beschreiben:

    *Combobox****PlusButton* **Textbox****Label *Label2* *Label3*

    *EndLabel*

    Bedeutet dies, dass es zu jeder Deiner 14 ComboBoxen je einen
    PlusButton, eine Textbox, ein Label, ein Label2 ein Label3 und
    ein EndLabel gibt?
    Was ist nun mit Deinen Minus-Buttons?

    Timer

    Combobox: wenn ein wort (z.B. Hallo) ausgewählt und der
    plussbutton gedrückt wurde erscheint:

    * 1. Der Text (Hallo) im Label und

    * 2. es erscheint eine an das hallo gebundende Zahl
     (z.B. 50) im Label2 und eine andere Zahl (z.B. 40)
    im Label3

    Zusammengefasst kann man so eine Kombination aus
    einem Wort und zwei zugeordneten Zahlen als Objekt
    mit den Eigenschaften

        Text (String)           -> z.B. "Hallo"
        Num1 (Integer)      -> z.B. 50
        Num2 (Integer)      -> z.B. 40

    betrachten. Evtl sollte man noch eine weitere Eigenschaft "ID" (Integer)
    spendieren, welche man mit einer eindeutigen ID belegt.
    Ein solches Objekt könnte dann z.B. so aussehen:

    Public Class XClass
        Private mID As Integer
        Private mText As String
        Private mNum1 As Integer
        Private mNum2 As Integer

        Public Sub New _
                (ByVal ID As Integer, _
                 ByVal Text As String, _
                 ByVal Num1 As Integer, _
                 ByVal Num2 As Integer)

            mID = ID
            mText = Text
            mNum1 = Num1
            mNum2 = Num2
        End Sub

        Public Sub New(ByVal ID As Integer)
            mID = ID
            mText = ""
            mNum1 = 0
            mNum2 = 0
        End Sub

        Public ReadOnly Property ID() As Integer
            Get
                Return mID
            End Get
        End Property

        Public Property Text() As String
            Get
                Return mText
            End Get
            Set(ByVal value As String)
                mText = value
            End Set
        End Property

        Public Property Num1() As Integer
            Get
                Return mNum1
            End Get
            Set(ByVal value As Integer)
                mNum1 = value
            End Set
        End Property

        Public Property Num2() As Integer
            Get
                Return mNum2
            End Get
            Set(ByVal value As Integer)
                mNum2 = value
            End Set
        End Property
    End Class

    Und eine ComboBox würde dann via ComboBox1.List.AddItem()
    mit solchen Objekten befüllt:

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                ) Handles MyBase.Load

            ComboBox1.DisplayMember = "Text"
            FillCombo(ComboBox1)
        End Sub

        Private Sub FillCombo(ByVal Cbo As ComboBox)
            Dim i As Integer
            Dim XC As XClass
            Dim N1 As Integer = 40
            Dim N2 As Integer = 50

            For i = 1 To 12
                N1 = N1 + i * 10
                N2 = N2 + i * 5
                XC = New XClass(i, MonthName(i, False), N1, N2)
                Cbo.Items.Add(XC)
            Next
        End Sub

    Wenn jetzt eine Wert aus der DropDownListe der CombBox ausgewählt
    wird, löst dies das Ereignis ComboBox_ListIndexChanged aus und
    auf dieses Ereignis kannst Du reagieren:

        Private Sub ComboBox1_SelectedIndexChanged _
                (ByVal sender As Object, _
                 ByVal e As System.EventArgs _
                ) Handles ComboBox1.SelectedIndexChanged

            Dim XC As XClass
            If ComboBox1.SelectedIndex > -1 Then
                XC = DirectCast(ComboBox1.SelectedItem, XClass)

                Label2.Text = XC.Num1.ToString
                Label3.Text = XC.Num2.ToString

            End If
        End Sub

    Mit der Auswahl eines Wertes aus der DropDownliste der Combobox
    wird somit Label2.Text und Label3.Text verändert, was die Ereignisse
    Label2.TextChanged u. Label3.TextChanged auslöst, die in der Sub
    ValueChanged (s.weiter unten) behandelt werden.

    Textbox: dort steht am anfang die zahl 0

    ... und in welcher Beziehung steht diese
    Zahl zu dem Text aus der ComboBox?

    es können andere zahlen eingegeben werden

    In eine normale Textbox können aber auch Strings eingegeben werden,
    die keine Zahlen repräsentieren, also z.B. "Mäuseklavier", was mit einer
    Zahl nichts zu tun hat. Diesen möglichen Fall muss Dein Programmcode
    abdecken (z.B. via .TryParse()).

    EndLabel: Rechnung: Textbox.Text * (Label2.Text + Label3.Text)
    -da kein button geklickt werden soll der diese rechnung durchführt
    kommt ein timer zum einsatz

    Dass man mit Strings, wie sie von Textbox.Text oder Label.Text zurückgegeben
    werden, eben nicht rechnen kann, habe ich schon mehrfach erwähnt.
    In diesem Zusammenhang auch nochmal der Hinweis, dass Du bei
    allen Deinen Projekten "Option Explicit" und "Option Strict" einschalten
    solltest.

    Statt

        Textbox.Text * (Label2.Text + Label3.Text)

    sollte Dein Code etwa so aussehen:

        Private Sub ValueChanged _
                (ByVal sender As Object, _
                 ByVal e As System.EventArgs _
                ) Handles _
                        TextBox1.TextChanged, _
                        Label2.TextChanged, _
                        Label3.TextChanged

            Dim Ergebnis As Integer
            Dim OprA As Integer
            Dim OprB As Integer
            Dim OprC As Integer

            Label1.Text = ""    ' Ergebnisanzeige erst mal löschen

            If Integer.TryParse(TextBox1.Text, Ergebnis) Then
                OprA = Ergebnis
                If Integer.TryParse(Label2.Text, Ergebnis) Then
                    OprB = Ergebnis
                    If Integer.TryParse(Label3.Text, Ergebnis) Then
                        OprC = Ergebnis

                        Ergebnis = OprA * (OprB + OprC)
                        Label1.Text = Ergebnis.ToString
                    End If
                End If
            End If
        End Sub

    Da diese Sub ValueChanged die Ereigniss TextBox1.TextChanged
    und auch die .TextChanged-Ereignisse der beiden Labels (Label2
    und Label3) abarbeitet, ist autom. sichergestellt, dass immer wenn
    sich in der Textbox oder in einem der beiden Labels Label2 oder
    Label3 der Textinhalt ändert auch sofort ein neues Ergebnis
    berechnet wird, sofern Textbox und beide Labels einen zu einem
    Wert vom Typ Integer umwandelbaren String enthalten.

    Timer: er soll alle 100ms das ergebniss der rechnung erneuern -
    also wenn die zeit agbelaufen ist wird das ergebniss angezeigt
    -der timer beginnt von neuem -nach 100ms wird wieder das
    ergebnis neu angezeigt

    Da die Sub ValueChanged jede Änderung in Textbox1 und den
    beiden Labels erfasst und ein Ergebnis berechnet, gibt es keinen
    Grund via Timer nochmal ein ja ohnehin schon vorhandenes
    Ergebnis zu berechnen.

    z.B.: Textbox.Text * (Label2.Text + Label3.Text)

    = 5 * (50 + 40

    =450


    also läuft im hintergrund ständig ein timer der die ergebnisse
    aktualisiert damit nicht ein button angeklickt werden muss

    Was, wenn ich Deine bisherigen Beschreibungen auch nur halbwegs
    richtig interpretiert habe, völlig überflüssig wäre, da dieser Timer
    nur Ergebnisse berechnen würde, die es ohnehin schon gibt.

    Ich vermute mal, dass dir objektorientiertes Programmieren und
    Ereignissteuerung (noch) nicht sonderlich geläufig sind. Mit diesen
    Themen solltest Du Dich aber unbedingt vertraut machen, bevor
    Du dann ein Ablauf und Bedienungskonzept für ein .net-Programm
    erstellst.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Freitag, 3. September 2010 08:11
  • ok ok,

    erstmal die funktion des programms:

    es soll ein programm zur erstellung von fahrzeugen sein (für ein spiel)

    man muss ein chassi auswählen und kann ihn komponenten hinzufügen (z.B. antriebe,....)

    es funzt bis auf die textboxen schon

    bei den textboxen ist ,wie du es mehrfach beschrieben hast, nur noch das problem das auch buchstaben eingegeben werden können

     

    könnte ich dir das programm einmal schicken? wenn ja wie?

    vlt. verstehst du es dann besser...

     

    Ich vermute mal, dass dir objektorientiertes Programmieren und
    Ereignissteuerung (noch) nicht sonderlich geläufig sind. Mit diesen
    Themen solltest Du Dich aber unbedingt vertraut machen, bevor
    Du dann ein Ablauf und Bedienungskonzept für ein .net-Programm
    erstellst.

     

    ich habe es seit ungefähr 3 wochen und habe auch erstmal die einführungsprogramme erstellt(hatte auch noch nicht so viel zeit dafür)

    wollte mich an etwas "größeres" ranwagen

     

    ein gruß aus leipzig

    ralle

     

    Freitag, 3. September 2010 12:01
  • Hallo,

    erstmal die funktion des programms:
    es soll ein programm zur erstellung von fahrzeugen
    sein (für ein spiel)

    man muss ein chassi auswählen und kann ihn komponenten
    hinzufügen (z.B. antriebe,....)

    Einen konkreten Zusammenhang zu den von Dir bisher
    beschriebenen ComboBoxen, Buttons und Labels sehe
    ich da allerding nicht.

    es funzt bis auf die textboxen schon

    Ich befürchte, dass dies eher Zufall ist.

    bei den textboxen ist ,wie du es mehrfach beschrieben hast,
    nur noch das problem das auch buchstaben eingegeben
    werden können

    Genau deshalb habe ich Dir ja in den vorangegangenen
    Antworten schon mehrfach die .TryParse()-Methoden für
    die verschiedenen num. Datentype gezeigt.

    Eine Alternative wäre, erst gar keine Eingaben in die
    Textbox zuzulassen, die sich nicht in einen numerischen
    Wert umwandeln lässt.
    Wie so etwas aussehen könnte, finest Du unter

        www.gssg.de -> Visual Basic -> VB.net
            -> Sonstige
                -> NumInput

    könnte ich dir das programm einmal schicken?

    Normalerweise mache ich so etwas nicht, da mir
    dazu einfach die Zeit fehlt, aber ich will mal eine
    Ausnahme machen.

    wenn ja wie?

    Unter www.gssg.de -> Impressum findest Du eine
    EMail-Adresse.

    vlt. verstehst du es dann besser...

    Ich befürchte Schlimmeres. ;-)

    ich habe es seit ungefähr 3 wochen

    In drei Wochen kann niemand eine Programmiersprache
    erlernen, schon gar nicht eine die auf das .net-Framework
    aufsetzt.

    und habe auch
    erstmal die einführungsprogramme erstellt _

    Welche "Einführungsprogramme"?

    (hatte auch noch nicht so viel zeit dafür)

    wollte mich an etwas "größeres" ranwagen

    Nun, erst mal solltest Du Dich mit den weniger grossen,
    aber um so wichtigeren Grundlagen vertraut machen.
    Ein entsprechendes Einsteigerbuch kann Dir dabei
    wertvolle Dienste leisten.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Freitag, 3. September 2010 16:48
  • sry war die letzen 2 tage verreist

    und bin auch total fertig

     

    aber kannst du mir das mit der rechung nochmal erklären ich verstehe es nicht ganz

     

    e-mail mit projekt und beschreibung schick ich dir morgen

    Sonntag, 5. September 2010 18:44
  • Hallo,

    aber kannst du mir das mit der rechung nochmal
    erklären ich verstehe es nicht ganz

    Was verstehst Du mit welcher Rechnung nicht ganz?

    Du solltest Deine Fragen etwas präziser und etwas
    verständlicher formulieren, wenn Du wirklich verwertbare
    Hilfe erwartest. Denke dabei daran, dass ein
    Aussenstehender erst mal keine Ahnung von Deinem
    Projekt hat und deshalb nicht wissen kann, was Du
    eigentlich machen willst und was bzw. wie Du es
    bisher gemacht hast.
    In den meisten Fällen hilft ein Stück relevanten
    Programmcodes am Besten, eine bestimmte
    Programmsituation zu beschreiben.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Montag, 6. September 2010 07:40
  • ich glaube ein code stück wird dir nicht weiterhelfen

     

    pass auf wenn

     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    WarpF.Text = (Warp.Text * TextBox1.Text) + (Warp2.Text * TextBox2.Text) + (Warp3.Text * TextBox3.Text) + (Warp4.Text * TextBox4.Text) + (Warp5.Text * TextBox5.Text) + (Warp6.Text * TextBox6.Text) + (Warp7.Text * TextBox7.Text) + (Warp8.Text * TextBox8.Text) + (Warp9.Text * TextBox9.Text) + (Warp10.Text * TextBox10.Text)

     

    so sieht so sieht sie bis jetzt aus  es sollen noch weitere rechnungen folgen(nach dem selben prinzip nur mit anderen labels und textboxen) aber jedes mal wenn ich es ausführen will steht dort:

    Ungültige Konvertierung von der Zeichenfolge  in Typ Double.

     

    was bewirkt man mit "Dim" und wie funktioniert "TryParse()" ?

    Montag, 6. September 2010 09:03
  • Hallo,

    ich glaube ein code stück wird dir nicht weiterhelfen

    pass auf wenn

    Private Sub TextBox1_TextChanged _
           (ByVal sender As System.Object, _
            ByVal e As System.EventArgs _
           ) Handles TextBox1.TextChanged

    Du behandelst hier nur TextBox1.TextChanged.
    Was ist mit den TextChanged-Ereignissen der
    übrigen Textboxen und Labels?

    WarpF.Text = _
        (Warp.Text * TextBox1.Text) +
        (Warp2.Text * TextBox2.Text) + _
        (Warp3.Text * TextBox3.Text) + _
        (Warp4.Text * TextBox4.Text) + _
        (Warp5.Text * TextBox5.Text) + _
        (Warp6.Text * TextBox6.Text) + _
        (Warp7.Text * TextBox7.Text) + _
        (Warp8.Text * TextBox8.Text) + _
        (Warp9.Text * TextBox9.Text) + _
        (Warp10.Text * TextBox10.Text)

    Aua..!
    Langsam tut es wirklich weh.
    Warum um alles in der Welt willst Du immer mit
    Strings anstatt mit Zahlen rechnen.
    Mit Strings kann man eben nicht rechnen weil wie
    schon mehrfach angemerkt

        Dim Ergebnis as Double
        Ergebnis = "Mäusemelkeimer" * "Marmeladenkübel"

    nun mal ganz sicher kein brauchbares Ergebnis liefern
    würde.

    so sieht so sieht sie bis jetzt aus

    ... und funktioniert so natürlich nicht, da man eben mit
    Strings wie sie z.B. TextBox.Text liefert eben nicht
    rechnen kann.
    Zum Rechnen braucht man Zahlen!!!
    Glaube es halt bitte endlich mal.

    es sollen noch weitere rechnungen folgen(nach dem selben
    prinzip nur mit anderen labels und textboxen) aber jedes
    mal wenn ich es ausführen will steht dort:

    Ungültige Konvertierung von der Zeichenfolge in Typ Double.

    Schalte bei Deinen Projekteigenschaften "Option Explicit"
    Und "Option Strict" ein und verwende zum Rechnen keine
    Strings (wie sie von TextBox.Text oder Label.Text geliefert
    werden) sondern eben Zahlen. Dies bedeutet, Du muss
    prüfen, ob die betr. Textbox oder das betr. Label einen zu
    einem numerischen Datentyp (z.B. Double) wandelbaren String
    enthält, wenn ja wandelst Du diesen String zu Double und
    kannst mit dem so erhaltenen Wert rechnen.
    Das Prüfen und Umwandeln kannst Du in einem einzigen
    Arbeitsgang via

        Dim Ergebnis as Double
        if Double.TryParse(Textbox.Text, Ergebnis) then
            ' ok TextBox.Text enthält einen zu Double
            ' wandelbaren String, das Ergebnis der
            ' Umwandlung steht in der Variablen
            ' Ergebnis
        else
            ' Textbox.Text enthält einen nicht zu Double
            ' wandelbaren String, also gibt es in Ergebnis
            ' auch keinen verwertbaren Wert.
        End if

    was bewirkt man mit "Dim"

    Mit Dim kannst Du eine Variable deklarieren.
    Wenn Dir nicht mal solche einfachen Grundlagen bekannt
    sind, macht es aber herzlich wenig Sinn, wenn Du so
    weiterwurschtelst.

    und wie funktioniert "TryParse()" ?

    Auch das habe ich in meinen vorangegangenen Postings
    schon mehrfach gezeigt. Wenn Du meine Postings offenbar
    gar nicht liest, dann hat die ganze Veranstaltung hier
    herzlich wenig Sinn.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Montag, 6. September 2010 17:39
  • danke für den tipp...^^

     

    yo hab mir ein buch bestellt (is auch schon seit ner woche da)

    dim verstehe ich jetzt halbwegs

    aber anstatt dim kann man auch mit Val(...) arbeiten

    das wäre bei mir genauso sinnvoll wie mit dim (ist genauso lang...vlt sogar noch nen stück kürzer) da es sehr viele verschiedene werte sind

     

    programm läuft auch schon super  nur hätte ich jetzt noch 2 fragen da ich die antwort auch nicht wirklich im buch finde

    und zwar:

    wie kann man programme auf anderen computern aktualisieren?

    und wie kann man das maus zeichen mit einem bild hinterlegen?  hatte die idee es mit einer picturebox zu versuchen die immer auf bei der mausposition bleibt  aber wie?

     

    (habe mir deine post durchgelsen, bin am anfang zu überstürtzt rangegangen)

     

    ralle

    Montag, 13. September 2010 19:38
  • Hallo,

    yo hab mir ein buch bestellt (is auch schon seit ner
    woche da)

    dim verstehe ich jetzt halbwegs

    aber anstatt dim kann man auch mit Val(...) arbeiten

    Du solltest Dein Buch schon auch lesen.
    Nur "da sein" genügt nicht.

    Val() und Dim sind nun wirklich zwei völlig verschiedene
    Dinge und Du solltest Dir zu beiden die Online-Hilfe
    ansehen.


    das wäre bei mir genauso sinnvoll wie mit dim (ist
    genauso lang...vlt sogar noch nen stück kürzer) da
    es sehr viele verschiedene werte sind

    Val() statt Dim zu verwenden wäre ganz sicher nicht
    sinnvoll, da es eben zwei völlig verschiedene Dinge sind,
    die rein gar nichts miteinander zu tun haben.

    Wie schon mehrfach erwähnt, solltest Du bei Deinen
    Projekten "Option Explicit" und "Option Strict" einschalten,
    aber vorher solltest Du ein Buch für VB.net - Einsteiger
    durcharbeiten.

    Bis dahin sollten wir diese Diskussion beenden.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    Dienstag, 14. September 2010 06:05