Hallo, ich habe eine Maske, wo ich eine XML einlade, in dieser XML steht alles drin. Wie viele Button, wo positioniert usw. Die Elemente kann ich dann wenn man die Datei lädt erstellen, positionieren klappt alles. Jetzt habe ich aber ein Problem. Wenn ich auf einen Button drücke, springe ich in eine Funktion, sowas hier Form Load: AddHandler ButtonHelp(indexID).Click, AddressOf myHelpButtonClick ... Private Sub myHelpButtonClick(sender As Object, e As EventArgs) MsgBox("ok") End Sub Das klappt. Ich habe ca. 50 Help-Buttons, klicke ich drauf, kommt "OK". Jetzt das Problem. Jeder Help Button soll einen anderen Text darstellen (steht auch in der XML). Wie mache ich das? Ich kann ja jetzt schlecht 50x Funktionen erstellen, oder? Das Problem ist, in Summe kann ich bis zu 500 Button haben. Gibt es hier einen Trick, wie man das per Array lösen kann?
JA. Public my_Button As New Dictionary(Of Integer, BUTTON) Sub my_button_ini my_button.Add(1, my_button_1) ' my_button_1 ist der echte Name des Button my_button.Add(2, my_button_3) my_button.Add(2, my_button_3) end sub sub füllen for i = 1 to 3 my_button(i).text = "button-" + str(i) next i end sub Ich hoffe das ist logisch und hilft Ist die moderne Form. Unter vb 6 konnte mal das direkt zuweisen. Du kannst dann mit my_button(index).**** alles zuweisen. Wie in meinen Beispiel den namen. Musst halt nur wissen welcher Index welcher button ist. Ist besonders gut, wenn man den Visible Befehl nutzt, oder Enable, Sonst tippt man sich doof. Nebeninfo : der NAME des Buttons kann frei wählbar sein. Es muss nur ein Button sein. Du kannst dann den Button über Sein REAL-Namen ansprechen oder sein "Familien-Namen" ;) Gruß Pucki
Kleiner Nachtrag Private Sub bb_1_Click(sender As System.Object, e As System.EventArgs) Handles bb_1.Click, bb_2.Click, bb_3.Click name_des_button = sender.name if name_des_button = "bb_1" then msgbox("alles gut, hab bb_1 getroffen") End Sub Gruß Pucki
Alexander K. schrieb: > Kleiner Nachtrag > > Private Sub bb_1_Click(sender As System.Object, e As System.EventArgs) > Handles bb_1.Click, bb_2.Click, bb_3.Click > > name_des_button = sender.name > > if name_des_button = "bb_1" then msgbox("alles gut, hab bb_1 > getroffen") > > End Sub > > Gruß > > Pucki Perfekt das hat mir sogar schon gereicht. Das wurde mir nicht angezeigt, wenn ich sender. gemacht habe kam nur hash und tostring usw aber nichts anders. Da wusste ich das nicht. Ich habe jedem Button usw im TAG eine Nummer (nämlich seine index_nr) gegeben. So kann ich jetzt sender.tag machen und habe die indexnr und kann darüber direkt alles weitere aus dem Array mit den Texten entziehen. Genial
Die .xx Listen sind nicht immer vollständig oder zeigen Befehle zu spät an. button_1.PerformClick z.b. da kommt PerformClick erst wenn du perf eingeben hast. Ist übriges der Befehl per Programm auf einen Button zu klicken. Benutze ich sehr oft wenn ich nach eine Operation den "neu laden" o.s. Button auslösen will, um ein Datagrid zu aktualisieren. Oder was auch immer. My.Application.DoEvents <- das selbe (erst nach den 3 Buchstaben). Löst ein neu zeichnen aus. Sehr wichtig wenn man ein Event-Zähler laufen hat. for i = 1 to 10 label.text = "Bearbeite "+ str(i) + " 10" Next i Da passiert nix während das Prg. läuft in der Anzeige und plötzlich steht eine 10 da. for i = 1 to 10 label.text = "Bearbeite "+ str(i) + " 10" My.Application.DoEvents Next i Und der Zeigt brav alle 10 Zahlen an. Nur so ein bisschen Infos die du vielleicht mal brauchen kannst. ;) edit Noch schlimmer wird es bei zu geladenen System-Objekten wie z.B. Excel ;) Gruß Pucki
Alexander K. schrieb: > My.Application.DoEvents <- das selbe (erst nach den 3 Buchstaben). > Löst ein neu zeichnen aus. Sehr wichtig wenn man ein Event-Zähler laufen > hat. > > for i = 1 to 10 > label.text = "Bearbeite "+ str(i) + " 10" > Next i > > Da passiert nix während das Prg. läuft in der Anzeige und plötzlich > steht eine 10 da. > for i = 1 to 10 > label.text = "Bearbeite "+ str(i) + " 10" > My.Application.DoEvents > Next i > > Und der Zeigt brav alle 10 Zahlen an. > > Nur so ein bisschen Infos die du vielleicht mal brauchen kannst. ;) > > edit Noch schlimmer wird es bei zu geladenen System-Objekten wie z.B. > Excel ;) > > Gruß > > Pucki Ja, DoEvents() ist sehr wichtig, nutze ich oft. Ich komme eigentlich aus der Mikrocontroller Programmierung, Interrupts sind da Standard, das gibt es irgendwie nicht, Timer löst nicht aus wenn man in einer Schleife ist. Früher bevor ich den Befehl kannte, habe ich immer mit mehreren Timern experimentiert die sich gegenseitig triggern usw um nicht "hängen" zu bleiben in Schleifen usw. DoEvents() macht das ganze Ding aber weitaus einfacher. Ich habe noch ein Problem, dazu mache ich gleich aber einen neuen Thread auf
CATCO schrieb: > Ich habe noch ein Problem, dazu mache ich gleich aber einen neuen Thread > auf Mal schauen. Ich bin in Mikrocontroller-Programmierung noch nicht zu ganz fit. Aber da ich mit Visual-Basic-sehr ähnlichen Code (Auch Basic mit .befehlen) programmiere, muss ich mich nur noch etwas mit BIT-Verschiebungen herum ärgern. ;) Gruß Pucki
Alexander K. schrieb: > CATCO schrieb: >> Ich habe noch ein Problem, dazu mache ich gleich aber einen neuen Thread >> auf > > Mal schauen. > > Ich bin in Mikrocontroller-Programmierung noch nicht zu ganz fit. > > Aber da ich mit Visual-Basic-sehr ähnlichen Code (Auch Basic mit > .befehlen) programmiere, muss ich mich nur noch etwas mit > BIT-Verschiebungen herum ärgern. ;) > > Gruß > > Pucki Bitschiebung usw geht mit VB ja auch ganz gut. Der Vorteil in C ist nur die Programmierung mit Interrupts und Pointern, das hat mir anfangs stark gefehlt in VB aber habe mich dran gewöhnt man muss nur wissen, welcher Trick noch geht wie DoEvents als Beispiel.
Ich habe mich falsch ausgedrückt. Ich programmiere die Arduino-Chips via Visual-Basic ähnlichen Code. Der wird dann vom Compiler in ein Arduino-IDE kompatiblen Code umgewandelt und an den Programmer/ Arduino gesenden. Hier mal eine gekürzer Code der NICHT Lauffähig ist, sondern nur die Art des progammieren zeigen soll. **************************************** Sub Process_Globals 'These global variables will be declared once when the application starts. 'Public variables can be accessed from all modules. Public Serial1 As Serial Public lcd As LiquidCrystal_I2C Public ic As WireMaster Private led_status As Boolean ' Private st_pin1 As Pin ' Private st_pin2 As Pin End Sub Private Sub AppStart Serial1.Initialize(115200) lcd.Initialize(0x27, 16, 2) 'based on the example from the project. lcd.Backlight = True 'lcd.Write("LED ï:ö ") lcd.SetCursor(1,0) ic.Initialize 'c temp TempSensorPin.Initialize(TempSensorPinNumber, TempSensorPin.MODE_OUTPUT) 'Init the timer MeasureTimer.Initialize("MeasureTimer_Tick", MeasureTimerInterval * 1000) led_timer.Initialize("ledTimer_Tick", ledTimerInterval * 1000) 'Start the timer MeasureTimer.Enabled = True led_status = True led_timer.Enabled = True lcd.SetCursor(0,1) lcd.Write("Temperatur:") End Sub
Kleiner Nachtrag. Im selben Programmierstil (IDE von der selben Firma), programmiere ich auch meine Android-Teile. ;) Ist doch eh immer alles das selbe. Warum dann 1000 Umgebungen lernen, wenn es reicht die Eigenheiten der Geräte zu kennen. ;) Rasperry, Java und Appel-Teile geht auch, aber ich muss es ja nicht übertreiben. ;) Gruß Pucki
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.