| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Neuling - Button als Wechselschalter (3093 mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2614 Registriert: 02.10.2006
|
erstellt am: 04. Nov. 2009 16:57 <-- editieren / zitieren --> Unities abgeben:         
Hallo auch, ich bin momentan dabei mir ein wenig VB beizubringen, damit ich in SolidWorks meine Macros besser verstehe. Nun erstelle ich mir mein erstes Projekt. Ich möchte einen Button als Wechselschalter betätigen. Gibt es eine Einstellung im Button der dies ermöglicht, oder gibt es eine andere Funktion die dies kann? Ich dachte erst, dass ich es mit einem Merker realisieren kann, dies geht aber so nicht. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Merker = 0 Then 'erster Durchgang Button1.Text = "Nächster Schritt" Merker = 1 End If If Merker = 1 Then 'zweiter Durchgang Merker = 0 Button1.Text = "Neues Spiel" End If Kann mir jemand auf die Sprünge helfen, wie ich das hinbekomme? Ich möchte auf jedenfall vermeiden, dass ich den Merker außerhalb dieser Routine durch eine andere Aktion von 0 auf 1 und zurück setze, weil dann kann ich gleich einen zweiten Button setzen. Besten Dank auch, Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Moderator Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600
|
erstellt am: 04. Nov. 2009 17:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hallo Andi, mit welchem VB arbeitest du? Deinem Code nach müsste es irgend was mit .NET sein. Für eine solche Aufgabe stellt die das Framework die CheckBox zur Verfügung. Du musst die Eigenschaft Appearance auf Button ändern. Mit der Eigenschaft Checked kannst du dann abfragen ob deine Button gedrückt ist. Also ungefähr so:
Code: Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If Me.CheckBox1.Checked Then Me.CheckBox1.Text = "Nächster Schritt" Else Me.CheckBox1.Text = "Neues Spiel" End If End Sub
Mit einem Merker kannst du allerdings auch arbeiten. Diesen musst du nur in die Tag Eigenschaft des Buttons speichern:
Code: Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click If Me.Button1.Tag Is Nothing Then Button1.Text = "Nächster Schritt" Me.Button1.Tag = 1 Else If CInt(Me.Button1.Tag) = 1 Then Button1.Text = "Neues Spiel" Me.Button1.Tag = 0 Else Button1.Text = "Nächster Schritt" Me.Button1.Tag = 1 End If End If End Sub
Viel Spaß beim ausprobieren ... ------------------ Mfg Daniel www.MySldWorks.de - SolidWorks API Snippets Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2614 Registriert: 02.10.2006
|
erstellt am: 05. Nov. 2009 00:27 <-- editieren / zitieren --> Unities abgeben:         
Hallo Daniel, besten Dank für deine Ausführungen und Entschuldige, ich arbeite mit MS Visual Basic 2008 Express Edition. Ich habe mich für deine 2 Variante entschieden und sogar noch einen dritten Status eingefügt. Es funktioniert soweit alles gut, bis auf einen Wermutstropfen. Die beiden Beschriftungen "Neues Spiel" und "Nächster Schritt" sind ja nur Platzhalter für eine überschauliche Fragestellung. Im richtigen Programm kommen in den beiden (jetzt drei) Schritten ne Menge Programmanweisungen hinzu. Wenn ich das erste Mal den Button drücke, steigt das Prg. ja über die Zeile If Me.Button1.Tag Is Nothing Then ein, und anschließend wechselt er bei jedem weiteren Drücken des Buttons zwischen den beiden Else-Anweisungen hin und her. Dort sind auch die ganzen Programmanweisungen vergeben. Das heisst beim ersten drücken des Buttons tut sich erst Mal nichts, außer dass der Tag auf 1 gesetzt wird. Jetzt müsste ich die ganzen Programmanweisungen der ersten Else-Anweisung in den ersten Schritt kopieren, was ich unschön finde. Oder, und nun meine Frage. Kann man den Tag nicht außerhalb der Routine schon auf 1 setzen und dann direkt in die erste Else-Anweisung einspringen? Dann würde schon beim ersten Drücken des Buttons eine Aktion ablaufen. Besten Dank noch mal, du hast mir bereits sehr geholfen. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Moderator Teamleiter
  
 Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600
|
erstellt am: 05. Nov. 2009 11:02 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2614 Registriert: 02.10.2006
|
erstellt am: 06. Nov. 2009 00:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo Daniel, tut mir Leid, so weit bin ich noch nicht, ich verstehe nur Bahnhof. Entweder du kannst mir nochmals mit mehr Details helfen, oder ich Vertage den kleinen Schönheitsfehler, bis ich mit meinem Selbststudium an den Umgang mit dem Load Ereignis dran bin. (Ich bin erst auf Seite 230 von 560 Seiten des Buches MS VisualBasic 2008 Schritt für Schritt) Auf jeden Fall weiss ich nun, dass es Prinzipiell geht. Besten Dank, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur

 Beiträge: 3815 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 06. Nov. 2009 00:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Andi Beck
Hallo Andi, Du könntest auch in den Eigenschaften des Buttons, also im Entwurfsmodus der Form, den Tag des Buttons auf "1" setzen. Das sollte denselben Effekt haben, wie mittels des Load-Ereignisses. Gruß, Torsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2614 Registriert: 02.10.2006
|
erstellt am: 06. Nov. 2009 01:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo Torsten, funktioniert bestens, ein Eintrag, dass wars. Also, Problem gelöst und ich kann nun an meinen restlichen Programmteilen weiter machen. Besten Dank euch beiden. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) [Diese Nachricht wurde von Andi Beck am 15. Nov. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2614 Registriert: 02.10.2006 Firma: SW 2024-5.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2025-1.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 15. Nov. 2009 13:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo noch mal, durch mein weiteres Beschäftigen mit der Problematik bin ich doch zu einer einfachen Lösung mittels Merker gekommen. Wichtig dabei ist, dass der Merker als globale und nicht als lokale Variable deklariert wird. Falls jemand über die Suche auf diesen Thread stößt, dem möchte ich diese Variante nicht vorenthalten. Public Class Form1 Dim Merker As Integer = 1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Merker = 1 Then Button1.Text = "1 Schritt" ElseIf Merker = 2 Then Button1.Text = "2 Schritt" ElseIf Merker = 3 Then Button1.Text = "3 Schritt" ElseIf Merker = 4 Then Button1.Text = "4 Schritt" End If Merker += 1 If Merker = 5 Then Merker = 1 End Sub End Class Bis dahin, Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |