Benutzer mit den meisten Antworten
Text aus Combobox soll leeres Label finden und Text übertragen

Frage
-
hey ho
ich habe mit VB Express 2010 ein Programm erstellt
Dort befinden sich:
- 14 Comboboxen
- 2 Button (+ ; - ) für jede Combobox
- 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
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.:
P. S.: Noch mehr reduzieren könntest Du den Code in dem Du Buttons/Label/ComboxBoxPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click SetLabelText(me.ComboBox1) End Sub
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
-
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 auswahlNa 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.LoadCreateControls()
FillCombos()
End SubPrivate Sub CreateControls()
Dim i As Integer
Dim Cbo As ComboBox
Dim Lbl As Label = Nothing
Dim Btn As Button
Dim H As IntegerDim BFont As Font = _
New Font("Arial", 10, FontStyle.Bold)Dim Y As Integer = 10
Dim X As Integer = 10For 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_ClickBtn = 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
NextX = 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)
NextMe.ClientSize = New Size(Lbl.Right + 10, Lbl.Bottom + 20)
End SubPrivate 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 SelectDirectCast _
(Me.Controls("Combo3"), _
ComboBox).Items.Add(MonthName(i, False))DirectCast _
(Me.Controls("Combo6"), _
ComboBox).Items.Add(MonthName(i, False))
NextDim 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 SubPrivate 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
NextIf Not Found Then
Dim C As ControlIf MsgBox("Labels löschen?", _
MsgBoxStyle.Question Or MsgBoxStyle.YesNo) _
= MsgBoxResult.Yes ThenFor 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 EDas 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
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
-
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 Classso 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
-
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.:
P. S.: Noch mehr reduzieren könntest Du den Code in dem Du Buttons/Label/ComboxBoxPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click SetLabelText(me.ComboBox1) End Sub
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
-
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 auswahlNa 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.LoadCreateControls()
FillCombos()
End SubPrivate Sub CreateControls()
Dim i As Integer
Dim Cbo As ComboBox
Dim Lbl As Label = Nothing
Dim Btn As Button
Dim H As IntegerDim BFont As Font = _
New Font("Arial", 10, FontStyle.Bold)Dim Y As Integer = 10
Dim X As Integer = 10For 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_ClickBtn = 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
NextX = 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)
NextMe.ClientSize = New Size(Lbl.Right + 10, Lbl.Bottom + 20)
End SubPrivate 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 SelectDirectCast _
(Me.Controls("Combo3"), _
ComboBox).Items.Add(MonthName(i, False))DirectCast _
(Me.Controls("Combo6"), _
ComboBox).Items.Add(MonthName(i, False))
NextDim 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 SubPrivate 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
NextIf Not Found Then
Dim C As ControlIf MsgBox("Labels löschen?", _
MsgBoxStyle.Question Or MsgBoxStyle.YesNo) _
= MsgBoxResult.Yes ThenFor 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 EDas 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
-
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 Subwä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
-
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
-
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.textCase Label3.Text.Length < 1
Label3.Text = ComboBox1.textCase Label2.Text.Length < 1
Label2.Text = ComboBox1.text... usw. ... usw
End Selectder 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) -
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
verwendenlol
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
-
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öschenDann 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 unterKompilieren
Erweiterte Kompilierungsoptionendas 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 nichtLabelA = 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 DoubleIf 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 IfMsgBox _
(LabelB.Name & " UND " & LabelC.Name & _
ControlChars.CrLf & _
"müssen numerische Werte (Double) enthalten!", _
MsgBoxStyle.Exclamation)
End SubIch 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) -
ich habe nochmal nachgedacht (sollte ich öfters mal machen)
If TextBox1.Text > "0" Then
ZellenKO.Text = ZellenJÄ.Text * TextBox1.Text
End Ifbin 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
-
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 gekommenEine "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 werdenFalsch!
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 mussBis 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) -
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 gekommenDass 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 Label3Zusammengefasst kann man so eine Kombination aus
einem Wort und zwei zugeordneten Zahlen als Objekt
mit den EigenschaftenText (String) -> z.B. "Hallo"
Num1 (Integer) -> z.B. 50
Num2 (Integer) -> z.B. 40betrachten. 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 IntegerPublic 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 SubPublic Sub New(ByVal ID As Integer)
mID = ID
mText = ""
mNum1 = 0
mNum2 = 0
End SubPublic ReadOnly Property ID() As Integer
Get
Return mID
End Get
End PropertyPublic Property Text() As String
Get
Return mText
End Get
Set(ByVal value As String)
mText = value
End Set
End PropertyPublic Property Num1() As Integer
Get
Return mNum1
End Get
Set(ByVal value As Integer)
mNum1 = value
End Set
End PropertyPublic Property Num2() As Integer
Get
Return mNum2
End Get
Set(ByVal value As Integer)
mNum2 = value
End Set
End Property
End ClassUnd 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.LoadComboBox1.DisplayMember = "Text"
FillCombo(ComboBox1)
End SubPrivate Sub FillCombo(ByVal Cbo As ComboBox)
Dim i As Integer
Dim XC As XClass
Dim N1 As Integer = 40
Dim N2 As Integer = 50For 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 SubWenn 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.SelectedIndexChangedDim XC As XClass
If ComboBox1.SelectedIndex > -1 Then
XC = DirectCast(ComboBox1.SelectedItem, XClass)Label2.Text = XC.Num1.ToString
Label3.Text = XC.Num2.ToStringEnd If
End SubMit 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 einsatzDass 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.TextChangedDim Ergebnis As Integer
Dim OprA As Integer
Dim OprB As Integer
Dim OprC As IntegerLabel1.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 = ErgebnisErgebnis = OprA * (OprB + OprC)
Label1.Text = Ergebnis.ToString
End If
End If
End If
End SubDa 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 angezeigtDa 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 mussWas, 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) -
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
-
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önnenGenau 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 unterwww.gssg.de -> Visual Basic -> VB.net
-> Sonstige
-> NumInputkö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" ranwagenNun, 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) -
Hallo,
aber kannst du mir das mit der rechung nochmal
erklären ich verstehe es nicht ganzWas 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) -
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()" ?
-
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.TextChangedDu 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 angemerktDim 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 viaDim 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 ifwas 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) -
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
-
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(...) arbeitenDu 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 sindVal() 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)