Benutzer mit den meisten Antworten
Problem mit Programmstrukturen

Frage
-
Hallo zusammen, ich bin nicht gerade der Typ von Mensch der schon mehrere Jahre Erfahrung in VB hat, insgesamt hab ich schon nen rechner und einen editor programmiert, mithilfe von 2 Büchern.
Nun wollte ich mich an etwas neues wagen. Mein Ziel ist es ein Schiffe versenken zu programmieren. Nun habe ich mehrere Probleme. Statt sie alle gleich rein zu posten, beginn ich mal mit dem ersten:
Also, der User soll in Textboxen angeben wo er seine Schiffe platziert, dazu gibt er Zahlen von 1-25 ein. nun möchte ich die folgendermassen verbinden:
Dim Gewinnzustand As Boolean Dim Looserzustand As Boolean Dim erstesSchiff As Integer Dim zweitesSchiff As Integer Dim drittesSchiff As Integer TextBox1.Text = erstesSchiff TextBox2.Text = zweitesSchiff TextBox3.Text = drittesSchiff Do While Gewinnzustand = True If CheckBox7.CheckState = CheckState.Indeterminate Then If CheckBox16.CheckState = CheckState.Indeterminate Then If CheckBox21.CheckState = CheckState.Indeterminate Then Gewinnzustand = True End If End If End If If CheckBox(erstesSchiff).CheckState = CheckState.Indeterminate Then If CheckBox(zweitesSchiff).CheckState = CheckState.Indeterminate Then If CheckBox(drittesSchiff).CheckState = CheckState.Indeterminate Then Looserzustand = True End If End If End If If Looserzustand = True Then Exit Do End If
ihr seht die zweite if-abfrage ist ein wenig seltsam. Wenn der user die zahlen eingibt sollen diesen angeben welche checkbox gecheckt werden muss um zu verlieren.
erstesSchiff, steht für den Standort.
gibt der user also 15 in die erste checkbox ein so sollte es nachher so sein:
checkbox(15), aber wie kann ich das checkbox element und die Variable verbinden???
Antworten
-
Hallo,
Nun wollte ich mich an etwas neues wagen. Mein Ziel ist es ein
Schiffe versenken zu programmieren.
Nun habe ich mehrere Probleme.
Statt sie alle gleich rein zu posten, beginn ich mal mit dem ersten:
Also, der User soll in Textboxen angeben wo er seine Schiffe platziert,
dazu gibt er Zahlen von 1-25 ein.Die Beschreibung einer Position mit einfachen Zahlen ist eher
etwas ungewöhnlich. Üblicherweise gibt man Position in einem
X-Y-Koordinatensystem an, also z.B.X = Spalte_4
Y = Zeile_Bnun möchte ich die folgendermassen verbinden:
Dim Gewinnzustand As Boolean
Dim Looserzustand As Boolean
Dim erstesSchiff As Integer
Dim zweitesSchiff As Integer
Dim drittesSchiff As Integer
TextBox1.Text = erstesSchiff
TextBox2.Text = zweitesSchiff
TextBox3.Text = drittesSchiff
Do While Gewinnzustand = TrueWo ist das zugehörige Loop?
If CheckBox7.CheckState = CheckState.Indeterminate Then
If CheckBox16.CheckState = CheckState.Indeterminate Then
If CheckBox21.CheckState = CheckState.Indeterminate Then
Gewinnzustand = True
End If
End If
End If
If CheckBox(erstesSchiff).CheckState = CheckState.Indeterminate Then
If CheckBox(zweitesSchiff).CheckState = CheckState.Indeterminate Then
If CheckBox(drittesSchiff).CheckState = CheckState.Indeterminate Then
Looserzustand = True
End If
End If
End If
If Looserzustand = True Then
Exit Do
End If
ihr seht die zweite if-abfrage ist ein wenig seltsam.
Wenn der user die zahlen eingibt sollen diesen angeben
welche checkbox gecheckt werden muss um zu verlieren.Die Logik, welche hinter Deinen Checkboxen steckt, verstehe ich zwar
nicht, aber ich vermute mal, dass es 25 CheckBoxen (CheckBox1 ...
CheckBox25) auf Deiner Form gibt.Wenn Du diese nun über einen Index (1 ... 25, bzw. besser 0 ... 24)
ansprechen willst, kannst Du Deine Checkboxen in eine ListOf(CheckBox)
packen.erstesSchiff, steht für den Standort.
gibt der user also 15 in die erste checkbox ein so sollte es
nachher so sein:
checkbox(15), aber wie kann ich das checkbox element und die
Variable verbinden???Kopiere das nachfolgende Beispiel in ein leeres Formmodul (Form1.vb)
' / / / Code in Form1.vb
Public Class Form1
Private CBoxList As List(Of CheckBox)
Private WithEvents TextBox1 As TextBox
Private WithEvents btnClear As Button
Private mCBName As StringPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
End SubPrivate Sub CreateControls()
CBoxList = New List(Of CheckBox)
Dim i As Integer
Dim CB As CheckBox = Nothing
Dim Fnt As New Font("Arial", 12)
Dim Top As Integer = 10
Dim Left As Integer = 10
mCBName = "CheckBox"
For i = 1 To 25
CB = New CheckBox
With CB
.Name = mCBName & i.ToString
.Font = Fnt
.ThreeState = True
.CheckState = CheckState.Unchecked
.AutoSize = True
.Text = i.ToString.PadLeft(2, "0"c)
.CheckAlign = ContentAlignment.TopCenter
.Location = New Point(Left, Top)
If i Mod 5 = 0 Then
Top += 50
Left = 10
Else
Left += 50
End If
End With
Me.Controls.Add(CB)' Checkbox der CBoxList hinzufügen
CBoxList.Add(CB)
NextTextBox1 = New TextBox
With TextBox1
.Name = "TextBox1"
.Font = Fnt
.TextAlign = HorizontalAlignment.Right
.SetBounds(10, CB.Bottom + 20, 40, .Height)
End With
Me.Controls.Add(TextBox1)Me.ClientSize = _
New Size _
(CBoxList(4).Right + 10, _
TextBox1.Bottom + 10)Me.FormBorderStyle = _
Windows.Forms.FormBorderStyle.Fixed3DbtnClear = New Button
With btnClear
.Name = "btnClear"
.Font = New Font("Arial", 8).SetBounds _
(Me.ClientSize.Width - 70, _
TextBox1.Top, _
60, _
TextBox1.Height).Text = "Clear"
End With
Me.Controls.Add(btnClear)End Sub
Private Sub TextBox_KeyPress _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs _
) Handles TextBox1.KeyPressIf e.KeyChar = Chr(13) Then
e.Handled = True
SetCB(DirectCast(sender, TextBox))
End IfEnd Sub
Private Sub SetCB(ByVal TB As TextBox)
Dim Idx As Integer
Dim CBox As CheckBox
If Integer.TryParse(TB.Text, Idx) Then
' TB.Text enthält eine Zahlendarstellung (Integer).Select Case Idx
Case 1 To 25
' gültige Nummern 1 ... 25Idx -= 1
CBox = CBoxList(Idx)
If CBox.CheckState <> CheckState.Indeterminate Then
' Checkbox hat noch nicht den Zustand .Indeterminate
CBox.CheckState = CheckState.Indeterminate
TB.SelectAll()
Exit Sub
End If
End SelectEnd If
' TB.Text enthält keine Zahlendarstellung (Integer)
' oder eine Zahl ausserhalb des Bereiches 1 ... 25
' oder hat bereits CheckState = Indeterminate
TB.Text = ""
Beep()
End SubPrivate Sub btnClear_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles btnClear.ClickDim CB As CheckBox
For Each CB In CBoxList
CB.CheckState = CheckState.Unchecked
CB.Tag = Nothing
Next
TextBox1.Clear()
End Sub
End Class
' \ \ \ E N T ENach dem Programmstart siehst Du die Form1 mit 25 CheckBoxen
sowie einer Textbox (links unten) und einem Button "Clear" (rechts unten).Trage in die TextBox Zahlen im Bereich 1 ... 25 ein und drücke
anschliessend die Eingabetaste. Die entsprechende Textbox
wird damit auf CheckState = Indeterminate gestellt.Mit einem Klick auf den Button "Clear" werden alle Checkboxen
wieder in den Zustand CheckState = UnChecked versetzt.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 21. Oktober 2010 11:55
Alle Antworten
-
Hallo,
Nun wollte ich mich an etwas neues wagen. Mein Ziel ist es ein
Schiffe versenken zu programmieren.
Nun habe ich mehrere Probleme.
Statt sie alle gleich rein zu posten, beginn ich mal mit dem ersten:
Also, der User soll in Textboxen angeben wo er seine Schiffe platziert,
dazu gibt er Zahlen von 1-25 ein.Die Beschreibung einer Position mit einfachen Zahlen ist eher
etwas ungewöhnlich. Üblicherweise gibt man Position in einem
X-Y-Koordinatensystem an, also z.B.X = Spalte_4
Y = Zeile_Bnun möchte ich die folgendermassen verbinden:
Dim Gewinnzustand As Boolean
Dim Looserzustand As Boolean
Dim erstesSchiff As Integer
Dim zweitesSchiff As Integer
Dim drittesSchiff As Integer
TextBox1.Text = erstesSchiff
TextBox2.Text = zweitesSchiff
TextBox3.Text = drittesSchiff
Do While Gewinnzustand = TrueWo ist das zugehörige Loop?
If CheckBox7.CheckState = CheckState.Indeterminate Then
If CheckBox16.CheckState = CheckState.Indeterminate Then
If CheckBox21.CheckState = CheckState.Indeterminate Then
Gewinnzustand = True
End If
End If
End If
If CheckBox(erstesSchiff).CheckState = CheckState.Indeterminate Then
If CheckBox(zweitesSchiff).CheckState = CheckState.Indeterminate Then
If CheckBox(drittesSchiff).CheckState = CheckState.Indeterminate Then
Looserzustand = True
End If
End If
End If
If Looserzustand = True Then
Exit Do
End If
ihr seht die zweite if-abfrage ist ein wenig seltsam.
Wenn der user die zahlen eingibt sollen diesen angeben
welche checkbox gecheckt werden muss um zu verlieren.Die Logik, welche hinter Deinen Checkboxen steckt, verstehe ich zwar
nicht, aber ich vermute mal, dass es 25 CheckBoxen (CheckBox1 ...
CheckBox25) auf Deiner Form gibt.Wenn Du diese nun über einen Index (1 ... 25, bzw. besser 0 ... 24)
ansprechen willst, kannst Du Deine Checkboxen in eine ListOf(CheckBox)
packen.erstesSchiff, steht für den Standort.
gibt der user also 15 in die erste checkbox ein so sollte es
nachher so sein:
checkbox(15), aber wie kann ich das checkbox element und die
Variable verbinden???Kopiere das nachfolgende Beispiel in ein leeres Formmodul (Form1.vb)
' / / / Code in Form1.vb
Public Class Form1
Private CBoxList As List(Of CheckBox)
Private WithEvents TextBox1 As TextBox
Private WithEvents btnClear As Button
Private mCBName As StringPrivate Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.LoadCreateControls()
End SubPrivate Sub CreateControls()
CBoxList = New List(Of CheckBox)
Dim i As Integer
Dim CB As CheckBox = Nothing
Dim Fnt As New Font("Arial", 12)
Dim Top As Integer = 10
Dim Left As Integer = 10
mCBName = "CheckBox"
For i = 1 To 25
CB = New CheckBox
With CB
.Name = mCBName & i.ToString
.Font = Fnt
.ThreeState = True
.CheckState = CheckState.Unchecked
.AutoSize = True
.Text = i.ToString.PadLeft(2, "0"c)
.CheckAlign = ContentAlignment.TopCenter
.Location = New Point(Left, Top)
If i Mod 5 = 0 Then
Top += 50
Left = 10
Else
Left += 50
End If
End With
Me.Controls.Add(CB)' Checkbox der CBoxList hinzufügen
CBoxList.Add(CB)
NextTextBox1 = New TextBox
With TextBox1
.Name = "TextBox1"
.Font = Fnt
.TextAlign = HorizontalAlignment.Right
.SetBounds(10, CB.Bottom + 20, 40, .Height)
End With
Me.Controls.Add(TextBox1)Me.ClientSize = _
New Size _
(CBoxList(4).Right + 10, _
TextBox1.Bottom + 10)Me.FormBorderStyle = _
Windows.Forms.FormBorderStyle.Fixed3DbtnClear = New Button
With btnClear
.Name = "btnClear"
.Font = New Font("Arial", 8).SetBounds _
(Me.ClientSize.Width - 70, _
TextBox1.Top, _
60, _
TextBox1.Height).Text = "Clear"
End With
Me.Controls.Add(btnClear)End Sub
Private Sub TextBox_KeyPress _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs _
) Handles TextBox1.KeyPressIf e.KeyChar = Chr(13) Then
e.Handled = True
SetCB(DirectCast(sender, TextBox))
End IfEnd Sub
Private Sub SetCB(ByVal TB As TextBox)
Dim Idx As Integer
Dim CBox As CheckBox
If Integer.TryParse(TB.Text, Idx) Then
' TB.Text enthält eine Zahlendarstellung (Integer).Select Case Idx
Case 1 To 25
' gültige Nummern 1 ... 25Idx -= 1
CBox = CBoxList(Idx)
If CBox.CheckState <> CheckState.Indeterminate Then
' Checkbox hat noch nicht den Zustand .Indeterminate
CBox.CheckState = CheckState.Indeterminate
TB.SelectAll()
Exit Sub
End If
End SelectEnd If
' TB.Text enthält keine Zahlendarstellung (Integer)
' oder eine Zahl ausserhalb des Bereiches 1 ... 25
' oder hat bereits CheckState = Indeterminate
TB.Text = ""
Beep()
End SubPrivate Sub btnClear_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles btnClear.ClickDim CB As CheckBox
For Each CB In CBoxList
CB.CheckState = CheckState.Unchecked
CB.Tag = Nothing
Next
TextBox1.Clear()
End Sub
End Class
' \ \ \ E N T ENach dem Programmstart siehst Du die Form1 mit 25 CheckBoxen
sowie einer Textbox (links unten) und einem Button "Clear" (rechts unten).Trage in die TextBox Zahlen im Bereich 1 ... 25 ein und drücke
anschliessend die Eingabetaste. Die entsprechende Textbox
wird damit auf CheckState = Indeterminate gestellt.Mit einem Klick auf den Button "Clear" werden alle Checkboxen
wieder in den Zustand CheckState = UnChecked versetzt.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 21. Oktober 2010 11:55
-
Hallo nochmal,
im vorigen Posting muss es statt
Trage in die TextBox Zahlen im Bereich 1 ... 25 ein und drücke
anschliessend die Eingabetaste. Die entsprechende Textbox
wird damit auf CheckState = Indeterminate gestellt.natürlich
Trage in die TextBox Zahlen im Bereich 1 ... 25 ein und drücke
anschliessend die Eingabetaste. Die entsprechende CheckBox
wird damit auf CheckState = Indeterminate gestellt.heissen.
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo Herr Götz erst einmal danke für die Hilfe, ich bin völlig beindruckt wie Sie das so schnell gemacht haben, jedenfalls habe ich keine Ahnung wie ich sonst darauf gekommen wäre.
Ich hab zwar mit 2 Büchern( vb für dummies/ eine studienausgabe) das wichtigste erlernt, aber so wie ich das sehe komme ich mit denen nicht weiter. Deshalb die Frage: Wie kann ich sonst so etwas erlernen. Tutorials im Internet sind zwar gut und recht, doch auch durch sie erlerne ich nicht die Kunst von Visual Basic- Programmierung. Kein Mensch den ich kenne hat irgendwie ahnung von visual basic, meine mutter hat monatelang gedacht, visual basic sei bildbearbeitung. ich komme so nicht weiter..
Bitte helfen sie mir, wie kann ich wirklich vb lernen??
Hochachtungsvoll
Joel Frischknecht
-
http://openbook.galileocomputing.de/visualbasic_2008/
Hallo Joel,
Buchtip von mir.
schöne Grüße Ellen
Ich benutze/ I'm using VB2008 & VB2010 -
Hallo Joel,
Hallo Herr Götz erst einmal danke für die Hilfe,
Bitteschön, freut mich, wenn ich helfen konnte.
ich bin völlig beindruckt wie Sie das so schnell gemacht
haben, jedenfalls habe ich keine Ahnung wie ich sonst
darauf gekommen wäre.Mit ein wenig Erfahrung ist das wirklich nur eine Sache
von wenigen Minuten.Ich hab zwar mit 2 Büchern( vb für dummies/ eine studienausgabe)
das wichtigste erlernt, aber so wie ich das sehe komme ich
mit denen nicht weiter. Deshalb die Frage: Wie kann ich sonst
so etwas erlernen.MSDN, also die Online-Hilfe zu VS.net ist "die" umfassende
Informationsquelle (auch für mich).
Die von Dir genannten Bücher kenne ich nicht und kann mir
deshalb darüber kein Urteil erlauben.Für den Einstieg kann ich auf die Bücher von Klaus Löffelmann,
die bei Microsoft Press erscheinen, verweisen. DasEntwicklerbuch
Microsoft
Visual Basic 20..
Grundlagen, Techniken, Profi-Know-howgibt es z.B. für Visual Basic 2010 und auch frühere Versionen
von VB.net. Die Anwendung der wichtigsten Objekte des .net-
Frameworks wird darin an einfachen, gut überschaubaren
Beispielen gezeigt und es wird auch vermittelt, wie Objekt-
orientierung und Ereignissteuerung in eigenen Projekten zur
Anwendung kommen sollten.Microsoft Visual Basic 2005 - Das Entwicklerbuch
gibt es z.B. auch als kostenlosen Download unter
http://www.microsoft.com/germany/msdn/aktuell/news/microsoftvisualbasic2005dasentwicklerbuch.mspxauch das Buch für die Version 2008
Visual Basic 2008 - Das Entwicklerbuch
gibt es als kostenlosen Download unter
http://www.microsoft.com/germany/msdn/aktuell/news/microsoftvisualbasic2008dasentwicklerbuch.mspxAnsonsten ist es immer gut, wenn man jemanden hat, der
einen beim Einstieg in die Programmierung bei der Hand
nimmt.Tutorials im Internet sind zwar gut und recht,
Ja, es gibt solche, die "gut und recht" sind, aber das muss man
leider auch wissen, es gibt viele, denen man dieses Attribut
eher nicht verleihen möchte.doch auch durch sie erlerne ich nicht die Kunst von Visual Basic-
Programmierung.Na ja, als "Kunst" würde ich das dann doch nicht gleich
bezeichnen wollen. Es ist ein Handwerk wie viele andere
auch und man muss es eben von Grund auf erlernen, was
ja auch für jedes andere Handwerk zutrifft.Kein Mensch den ich kenne hat irgendwie ahnung von visual basic,
Dann kennst Du offenbar nicht die richtigen Menschen. ;-)
In diesem und in anderen Foren und/oder Newsgroups zum
Thema Visual Basic gibt es eine Menge Leute, die ihr über
Jahre erworbenes Wissen gerne an andere weiter geben.meine mutter hat monatelang gedacht, visual basic sei
bildbearbeitung.So ganz falsch liegt sie damit doch gar nicht. Zumindest
hat sie schon mal die Idee, dass VB was mit Datenverarbeitung
zu tun hat. ;-)ich komme so nicht weiter..
Bitte helfen sie mir, wie kann ich wirklich vb lernen??Wie schon oben erwähnt, ist die wichtigste Informationsquelle
hierfür die MSDN-Library, die auch die Grundlage für die
Online-Hilfe zum Visual Studio ist. Neben der detaillierten
Dokumentation aller Objekte aus dem .net-Framework findet
man darin auch jede Menge an Codebeispielen, die einem
die Verwendung dieser Objekte mit ihren Eigenschaften und
Methoden nahebringen.Man darf nur nicht glauben, man könnte VB.net oder irgendeine
andere Programmiersprache in wenigen Tagen oder gar Stunden
erlernen. Im .net-Framework gibt es viele tausend Objekte mit einer
Vielzahl von Eigenschaften und Methoden. Dies alles kennenzulernen
braucht nun mal seine Zeit. Selbst ein sehr erfahrener Entwickler
wird kaum von sich behaupten können, auch nach Jahren schon
alle Objekte des .net-Frameworks umfassend zu kennen.Hier im Forum hast Du ja schon mal eine Stelle gefunden, an der
Du Deine Fragen zum Thema VB.net loswerden kannst und ich
bin hier nicht einzige, der Dir gerne weiterhilft. Die meisten MVPs,
die hier im Forum Fragen beantworten, betreiben auch eigene
Web-Sites, auf denen Du weitere Informationen zum Thema VB.net
findest. So z.B. auf meiner Internetpräsenzwww.gssg.de
-> Visual BasicGruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen) -
Hallo Joel,
hab die 2008er version des buchs schon runtergeladen,
freue mich bereits auf das "Studium"Es empfielt sich evtl. auch die 2005er Version zu lesen,
darin gibt es div. Hinweise für den Umstieg von VBclassic
(V65/6) nach VB.net, die in der 2008er Version nicht mehr
enthalten sind.Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)