Programmieren vereinfachen? Schreibarbeit sparen?

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    Programmieren vereinfachen? Schreibarbeit sparen?

    Hallo Leute,
    bei mir kommt es beim Programmieren öfters zu solchen Situationen:
    z.B. habe ich 16 Buttons sieh haben alle noch die Standardnamen (Button1,Button2,Button3 etc.)
    Nun will ich z.B. auf die Buttons Button3 - Button 9 einen gleichen Befehl ausführen:

    VB.NET-Quellcode

    1. Button3.Hide()
    2. Button4.Hide()
    3. Button5.Hide()
    4. Button6.Hide()
    5. Button7.Hide()
    6. Button8.Hide()
    7. Button9.Hide()

    Das sind bei meinem aktuellen Projekt 23 Stk.
    Und ja da wollte ich jetzt mal fragen wie ich mir das erleichtern könnte.
    Gibt es vllt sowas wie:

    VB.NET-Quellcode

    1. [Warnung: Phantasiebeispiel]
    2. Button3-Button9.Hide()

    Oder wie macht man das am besten?
    Ich habe es schon mit einer Schleife probiert, habe es aber nicht hin bekommen.
    Vllt. hab ich einfach nur nicht genug Wissen oder es geht garnicht.
    Danke schon mal im Voraus
    Du kannst Dir z. B. eine List(Of Button) anlegen und die gewünschten Buttons dieser Auflistung hinzufügen. Mit der Methode ForEach dieser Auflistung kannst Du nun für alle Elemente in der Liste eine beliebige Funktion ausführen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Sowas würde dafür gehen:

    VB.NET-Quellcode

    1. Dim ControlsToHide As New List(Of Control) From {Button1, Button2, Button3, Button4, Button5}
    2. ControlsToHide.ForEach(Sub(control) control.Hide))
    oder mit einen netten Sub :

    VB.NET-Quellcode

    1. Private Sub DisableButton(ByVal ButtonName As String, ByVal _start As Integer, ByVal _end As Integer)
    2. For Each btn As Control In Me.Controls
    3. For i As Integer = _start To _end
    4. If btn.Name = ButtonName & i.ToString Then
    5. btn.Hide()
    6. End If
    7. Next
    8. Next
    9. End Sub


    Wenn du z.b Button 2 - 4 auf .Hide stellen willst dann rufst du es so auf :

    VB.NET-Quellcode

    1. DisableButton("Button", 2, 4)

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

    @Tibiamicus: Ich würde die Namensliste zu Anfang einmalig generieren, anstatt sie für jeden Button erneut durchlaufen zu lassen. Zudem dürfte diese Funktion nicht die Buttons erwischen, die bspw. in Panels stecken. Dafür müsste man afaik eine rekursive Controlsuche machen. Außerdem CStr(i) => i.ToString().

    Zudem fördert eine solche Methode nicht unbedingt das, was hier oft (mMn zurecht) gepredigt wird: Die anständige und sinnvolle Benennung von Controls.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Du kannst auch die Tag-Property der Buttons benutzen, um jene damit zu kennzeichnen, die versteckt werden sollen. Dann mit For...Each-Schleife alle Buttons durchlaufen.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    @MarioKorna:: Pack alle diese Button und andere mit zu schaltende Controls in ein gemeinsames Panel, dann genügt ein Einzeiler:

    VB.NET-Quellcode

    1. Me.Panel1.Visible = Me.CheckBox1.Checked
    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!
    Danke für diese ganzen hilfreichen Antworten!
    Ich habe mich aber umentschieden und einfach ein "Programmierhelferlein" programmiert wo ich einfach alles angeben muss und dann wird es generiert.


    Dann einfach Copy & Paste...
    Fertig!
    Ich habe mich umentschieden aus dem Grund dass so gut wie jede Möglichkeit Nachteile hatte mit denen ich nicht klar gekommen bin.
    z.B. die Möglichkeit von Rod hat mir nicht gefallen denn ich wollte das Programmlayout nicht aus so einem Grund verändern. Sonst ist sie sehr gut.

    Danke nochmal für die ganzen Antworten :)
    Das ist doch egal, es handelt sich ja um eine List(of T)
    Dadurch sollte es funktionieres es einfach auf List(of Lineshape) umzuschreiben.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!