Code auf andere Controls legen ohne ändern

  • VB.NET

Es gibt 52 Antworten in diesem Thema. Der letzte Beitrag () ist von n1nja.

    Code auf andere Controls legen ohne ändern

    Hey Leute,

    Sry für die Überschrift, weiß nicht was ich schreiben soll...

    Und zwar es geht um folgendes!

    Ich hab mir für die Arbeit nen Akkord Rechner gebastelt.

    Aufbau ca:

    Hab Textboxen wo man Startzeit, Endzeit, Prozent, Stückzahl usw eingibt
    Nen Timer der mit Button an und ausgeschaltet wird.
    In den Timer stehen die kompletten Rechnungen!

    Jetzt meine Frage:

    Ist es möglich zb mit Tabpage zu arbeiten und den sämtliche Codekram und die Controlls zu kopieren ohne alles abändern zu müssen???

    zb:
    Page 1: textbox_zeitstart, textbox_zeitende
    Page 2: textbox_zeitstart2, textbox_zeitende2

    Da ich nicht immer die ganzen Zeiten in den Textboxen ändern will während der Arbeitszeit möcht ich 3-4 Pages haben, aber mit den komplett selben Funktionen...

    Hoffe ihr versteht das:)
    Wenn Du die Controls überall gleich haben willst, mach Dir ein entsprechendes UserControl und füge dies in allen Tabs ein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    n1nja schrieb:

    In den Timer stehen die kompletten Rechnungen!

    Warum tun sie das? :?:
    Nebenbei.. es lohnt sich ein eigenes Usercontrol zu schreiben, wenns nich so umfangreich is, dass sich det lohnt.. schau dir des hier an...
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim rnd As New Random
    3. Dim btn As New List(Of Button)
    4. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    5. For Each tb As TabPage In TabControl1.TabPages
    6. btn.AddRange(tb.Controls.OfType(Of Button))
    7. Next
    8. For Each _btn In btn
    9. AddHandler _btn.Click, AddressOf button_click
    10. Next
    11. For Each txt In {TextBox1, TextBox2, TextBox4}
    12. AddHandler txt.TextChanged, AddressOf txt_Changed
    13. Next
    14. End Sub
    15. Private Sub button_click(ByVal sender As Object, ByVal e As System.EventArgs)
    16. MessageBox.Show(sender.ToString)
    17. End Sub
    18. Private Sub txt_Changed(ByVal sender As Object, ByVal e As System.EventArgs)
    19. Dim _txt = DirectCast(sender, TextBox)
    20. _txt.BackColor = Color.FromArgb(rnd.Next(20, 256), rnd.Next(20, 256), rnd.Next(20, 256))
    21. End Sub
    22. Private Sub CheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    23. Handles CheckBox1.CheckedChanged,
    24. CheckBox2.CheckedChanged,
    25. CheckBox3.CheckedChanged,
    26. CheckBox4.CheckedChanged
    27. Dim chk = DirectCast(sender, CheckBox)
    28. Dim _btn = chk.Parent.Controls.OfType(Of Button)()
    29. _btn(0).Enabled = chk.Checked
    30. End Sub
    31. End Class

    Diverse Möglichkeiten um Controls mit gleicher Funktionalität zu belegen, allerdings eher im kleinen Umfang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FloFuchs“ ()

    n1nja schrieb:

    zb:
    Page 1: textbox_zeitstart, textbox_zeitende
    Page 2: textbox_zeitstart2, textbox_zeitende2

    vergiß den ganzen Kram mit den vielen gleichartigen Controls, und beschäftige dich mit Datenmodellierung und Databinding.

    Datenmodellierung:
    Es scheint hier Messungen zu geben, und jede Messung hat zeitStart und zeitEnde, und vmtl. noch einige weitere Parameter und Ergebnisse.

    Mach ein gscheites Datenmodell davon, und du kannst dir ein Gui basteln mit einem Dgv, wo man die Messungen auswählen kann, und in Textboxen oder was die Mess-Parameter bearbeiten kann.
    Es ist nur ein Satz an Steuerelementen nötig.
    Also ich hab hier mal Schnell die wichtigen Sachen auf ne Form geklatscht... So könnte das ca aussehen!



    Die Zeit wird verändert, sobald man das Produkt in der Listbox ändert, also IndexChange...

    Das ist jetzt zb eine Page vom TabControl, die zweite bzw dritte soll genau das gleiche sein...

    Glaube da bin ich mit der Methode von FloFuchs immernoch am besten dran!

    Da ich jetzt nicht ewig viel Schnick Schnack haben möchte... Ist nur für Arbeit gedacht:)

    Ansonsten kopiere ich den Code in die anderen 2-3 Timer und änder halt den Namen...
    1. Warum Timer? Wofür?
    2. Warum verschiedene Seiten, wenn die eh das gleiche machen?
    Edit...
    Ah wegen den änderungen der Zeiten.. mach dir doch einfach noch ne Combobox unten dazu, wo du deine Zeiten auswählen kannst
    Oder ne Checkboxreihe mit deinen 4 Zeiten.... Haken entsprechend setzen, Und die Zeit füllt sich in deine Boxen.. is glaub eleganter wie 4 Tabs

    FloFuchs schrieb:

    Warum Timer? Wofür?
    Genau.

    ErfinderDesRades schrieb:

    vergiß den ganzen Kram mit den vielen gleichartigen Controls, und beschäftige dich mit Datenmodellierung und Databinding.
    @n1nja: Dein Problem besteht darin, dass Du gleichzeitig 17 Probleme lösen willst, aber keinen Plan hast, ggf. auch nicht die erforderliche Ahnung.
    Male Dir also erst mal auf, was von wem abhängig ist, was primär und was sekundär ist. Dann programmiere Datenstrukturen und Datenflüsse, und wenn Du das ordentlich bindest, ist die GUI quasi nebenbei mit fertig.
    Und da ist kein Timer drin. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ihr versteht denk ich nicht woraus ich hinauswill... Er soll automatisch ausrechnen, wie viel Stück oder bei wie viel Stück ich Abstempeln muss....

    Das sind einfache Rechnungen in einen Timer, warum soll ich es so kompliziert machen?!?

    n1nja schrieb:

    Ihr versteht denk ich nicht woraus ich hinaus will...
    Das verstehe ich sehr wohl, doch Du hast eher eine graue Wolke im Kopf als einen Plan.
    Zerhackstückle das in mehrere kleine Teilprojekte, von denen Du jedes einzeln in einem separaten neuen Projekt bearbeitest.
    Wenn jedes dieser eilprojekte zu Deiner Zufriedenheit läuft, machst Du Dir ein neues Gesamtprojekt und setzt Deine Teilprojekte zusammen.
    So hast Du ales optimal in Klassen gekapselt, Du hast eine Reihe von Einzelproblemen gelöst, die Dir in Zukunft nützlich sein werden und
    Du hast eine Menge gelernt. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also der Timer hätte ich gedacht, soll dann alle Sekunden die aktuellen Rechnungen machen?! Oder etwa nicht?

    Ich möchte ja schließlich wissen, wenn ich um 6.45 angestempelt habe und es jetzt zb 10.33 ist wie viel Stück ich haben sollte?

    Ja der Lernwille is da, sonst bringt es ja nix :)

    n1nja schrieb:

    Ich möchte ja schließlich wissen, wenn ich um 6.45 angestempelt habe
    Wenn Du eine Pizza bestellst, rennst Du doch nicht jede Minute zur Tür umnachzusehen, ob der Pizzabote vor der Tür steht.
    Wenn er klingelt, siehst Du auf die Uhr (zufällig ist es gerade 6:45 Uhr) und öffnest die Tür. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    n1nja schrieb:

    Was bringt mir sonst der Rechner?

    Der macht es genau dann,l wenn es anfällt.
    Start einer Aktion, Ende einer Aktion.
    Wenn lange Zeit nix passiert, kommt 137 mal dasselbe Papier raus. Dünnmus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    n1nja schrieb:

    Woher weis das Programm dann,
    wenn Du am Rechner vorbeiläufst und schaust und außerdem der Timer taktet?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also hab es jetzt mal probiert...
    Timer rechnet alle 30 Sekunden aus ( die Differenz zwischen Startzeit zb 6:45 und die aktuelle Uhrzeit zb 8:41) und sagt mir dann wie viel Stück ich brauch...

    Jetzt wie soll das ohne Timer funktionieren???