Allgemein viele Button,Label,Tboc

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Facebamm.

    Allgemein viele Button,Label,Tboc

    Hallo Leute,
    ich habe ein Form1 mit mehreren Buttons,Labels,TBoxen usw.
    Alle möglichen Sub's in Modul ausgegliedert.
    Doch der Hauptteil von Form1 wird immer umfangreicher (clicks, textchanged usw).
    Meine Frage: Kann ich events (clicks,textchange) ausgliedern in Modul oder sowas.
    Als Anfänger brauche ich ein funtionierendes Beispiel, nicht um C&P zu machen sondern zum ausprobieren.
    Hey,

    ja geht... ist aber sinnlos und sehr aufwendig.

    Stattdessen würde ich an deiner Stelle deinen Code strukturieren über Regions

    Blödes Beispiel:

    VB.NET-Quellcode

    1. #Region "Textboxen"
    2. 'Eventhandling aller Textboxen
    3. #End Region
    4. #Region "Comboboxen"
    5. 'Eventhandling aller Comboboxen
    6. #End Region
    7. etc...


    Die Regions die dich nicht interessieren, kannst du dann einfach zuklappen. Die Unterteilung kannst du ja beliebig deinen Anforderungen anpassen. Regions kannst du auch kaskadierend benutzen:

    VB.NET-Quellcode

    1. #Region "Textboxen"
    2. #Region "TextChanged"
    3. 'TextChanged-Eventhandling aller Textboxen
    4. #End Region
    5. #Region "KeyPress"
    6. 'KeyPress-Eventhandling aller Textboxen
    7. #End Region
    8. #End Region




    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

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

    Hallo @ruediger2301

    Wenn dein CodeBehind zu "mächtig" wird ist dies meisst die Folge von fehlerhaften "Codedesign".
    Versuche gewisse Dinge in Klassen und/oder UserControls auszulagern.

    Eine weitere alternative, obwohl ja es ja nur ein "verschieben des Problem" wäre ist die verwendung von Partial.
    Siehe: docs.microsoft.com/en-us/visua…tial-classes?view=vs-2019

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ggf. noch mit (mehr) DataBinding arbeiten, da kann man meist schon einiges an (für Dich sichtbaren) Code einsparen. Menüklicks könnte man zusammenfassen, wird aber bei manchen auch als code smell angesehen. Aber hey: Wenn viele Sachen passieren, die sich nicht zusammenfassen lassen, dann ist es eben so. Wie Nofear23m schon erwähnte: in mehrere Dateien aufteilen, Partial Class verwenden und in der vbproj/csproj-Datei ggf. noch der Hauptform-vb-Datei unterordnen. Regions verwende ich persönlich gar nicht, ist ja nur ein Codeverstecken und weder ein Code-Aufteilen noch ein Code-Vermeiden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    jo, ich hebe nochmal die UserControls hervor.
    Ich hab gern Anwendungen mit einem TabControl, und auf jedem Tab liegt ein UserControl, was sich um Teilbereiche der Gesamt-Funktionalität kümmert.
    Auf diese Weise entstehen eiglich nie Dateien mit >500 Zeilen.
    Das mittm "funktionierendem Beispiel" ist problematisch - ich werd deswegen jetzt keine umfangreiche Anwendung programmieren.
    Mw. kannste gucken, ob etwa das "MiniKass" - Programm auf DataExpressions: Filter und berechnete Spalten im Dataset
    ein für dich instruktives Beispiel ist.
    Ansonsten wäre es wohl viel besser, du erstellst ein Beispiel - mit problematisch viel Code und Kram, stellst das hier ein, und wir basteln das um in was pfiffiges.

    zum Einstellen hier im Forum:
    Danke für eure Antworten.

    @Yanbel
    Dein Vorschlag gefällt mir.

    @Nofear23m
    Leider verstehe ich zuwenig von Klassen.
    Ein Beispiel, wie ich einen Button1.click von Form1 in einer anderen Klasse bearbeiten kann , würde mir weiterhelfen.
    Mit meinen fast 70 Lenzen beschäftige ich mit vb.net damit meine grauen Zellen nicht absterben.

    @VaporiZed
    Danke, übersteigt aber mein Wissen.

    ruediger2301 schrieb:

    Ein Beispiel, wie ich einen Button1.click von Form1 in einer anderen Klasse bearbeiten kann , würde mir weiterhelfen.

    Das kann "pauschal" nicht einfach in einem Beispiel gemacht werden. Wie @ErfinderDesRades schon geschrieben hat, kannst du gerne ein Minibeispiel machen mit Code in einem Click-Handler und wir könnten zeigen wie man den Code auslagert, das kommt aber immer auf die Situation auch drauf an.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    der code für einen button

    VB.NET-Quellcode

    1. Public Sub btnRmE_Click(sender As Object, e As System.EventArgs) Handles btnRmE.Click
    2. btnRmE.BackColor = Color.Red : pnlLineE.Visible = True : pnlLineE.Location = New Point(225, 40)
    3. RechtmE = True : P1 = False : P2 = False : P3 = False : P4 = False : Call tbLElöschen()
    4. End Sub
    Hallo

    Naja, ist jetzt nicht viel code. Was in zwei Zeilen passt würde ich auch nicht auslagern aber....

    Generell könnte man hier (ich weis ja nicht was hier genau gemacht wird) generell Methoden machen welche die "ControlStates" ändern.

    Also eine Methode als SetRmeControlsState(formInstance As FormX, currentState As RmEState) schreiben. RmEState ist dann hald ein Enumerator.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m

    Mit
    SetRmeControlsState(formInstance As FormX, currentState As RmEState)
    kann ich auch nichts anfangen.
    ich möchte einfach nur das click-event oder andere events woanders bearbeiten.
    Nur 2 Zeilen stimmt, aber das zigmal dazu noch labels,tbox,listb,picbox.
    und dann wirds unübersichtlich.
    dann ist Regions vielleicht die einfachste Lösung
    Wenn du das wirklich auslagern willst, denn würde ich wie von @Nofear23m für die Forms neue Partial Classes anlegen. Standardmäßig hat eine Form bereits eine Partial Class für die Initialisierung der Controls.

    Die kannst du dir mal anschauen, ist eigentlich selbsterklärend. Du findest sie in deinem Projektmappen-Explorer, wenn du Form1 erweiterst und denn den Initialize-Sub doppelklickst.

    Hier noch ein MSDN-Link: docs.microsoft.com/de-de/visua…tial-classes?view=vs-2019


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Hallo
    Danke für die Antwort
    Leider hilft mir das alles nicht weiter (fehlendes Wissen).
    also nochmal
    form1
    button.click irgendwo (modul oder class)
    anzeige "hallo"
    warum ist das so schwer als beispiel zu realisieren
    ich lerne viel und leichter wenn ich ein Beispiel habe
    Beispiel:

    das ist deine normale Klasse zu der Form.

    VB.NET-Quellcode

    1. Public Class Form1
    2. End Class


    Das ist eine zusätzlich Partielle Klasse die du dafür anlegst:

    VB.NET-Quellcode

    1. Public Partial Class Form1
    2. 'Eventhandling1
    3. 'Eventhandling2
    4. 'Eventhandling3
    5. End Class


    Und wenn dir das nicht reicht, dann legst du eine dritte Klasse an:

    VB.NET-Quellcode

    1. Public Partial Class Form1
    2. 'Nur TB-Eventhandling1
    3. End Class


    etc...


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Ich vermute eher weniger. Denn wenn jetzt ein Fehler auftritt musst du nicht mehr nur die richtige Methode suchen, sondern erstmal schauen in welcher Klasse die Methode überhaupt steckt. Darüber hinaus tauchen Partials nicht im Objektmappen-Explorer auf (korrigiert mich bitte wenn ich eine Einstellung übersehen habe, die das möglich macht) Von daher ist auch schon der Zugriff ein nerviger.

    Wenn du keine komplexen Strukturen lernen möchtest und das für dich nur ein Zeitvertreib ist, dann sind Regions denke ich die bessere Lösung.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    ruediger2301 schrieb:

    ich möchte einfach nur das click-event oder andere events woanders bearbeiten.
    wie bislang glaub jeder so ungefähr gesagt hat, bringt das garnix.
    Da wird nur Unordnung von einem Ort an einen anderen verlegt - das wird oft sogar noch unordentlicher.
    Ordnung schafft man, indem man untersucht, welche Vorgänge an verschiedenen Stellen gleich oder ähnlich ablaufen.
    Diese Vorgänge versucht man in einer Methode, oder evtl. in einem Objekt zusammenzufassen, sodass aus mw. 20 Vorgängen nur noch einer wird, der von 20 Stellen aus aufgerufen wird.

    ruediger2301 schrieb:

    warum ist das so schwer als beispiel zu realisieren
    ich lerne viel und leichter wenn ich ein Beispiel habe
    Ich hab dir ein Beispiel gegeben (verlinkt) - wieso äusserst du dich nicht dazu?

    Und wie gesagt: Wenn dein Programm unordentlich ist, dann ist das doch schon das allerbeste Beispiel.
    Stells hier ein (wie das geht, habe ich dir auch schon mitgeteilt), und wir guggemol, wie man da Ordnung schaffen kann.
    Fast immer geht das, aber nur nicht immer.
    marketplace.visualstudio.com/i…ame=Shanewho.IHateRegions nettes tool, empfehle ich :D #Region

    C#-Quellcode

    1. namespace Se7en.Collections.Linq


    Namespaces und Ordner sind auch ein tolle Sachen


    vllt. doppel ich mich hier:
    Doppelten code auslagern in extra Methoden
    Spoiler anzeigen

    C#-Quellcode

    1. private void SetupFalcon() {
    2. startCapture(ref FalconControllerLeft, Falcon.VideoInputSource.VideoIn1);
    3. startCapture(ref FalconControllerRight, Falcon.VideoInputSource.VideoIn5);
    4. void startCapture(ref FalconController controller, Falcon.VideoInputSource source) {
    5. FalconSetting falconSetting = FalconSetting.Default;
    6. falconSetting.VideoSource = source;
    7. controller = new FalconController(falconSetting);
    8. controller.StartCaptureLoop();
    9. }
    10. }

    oder

    Spoiler anzeigen

    C#-Quellcode

    1. ​private void Bt_Add(object sender, EventArgs e)
    2. {
    3. CompileImage(OffsetMoveType.Right);
    4. UpdateCode();
    5. }
    6. private void Bt_Remove(object sender, EventArgs e)
    7. {
    8. CompileImage(OffsetMoveType.Left);
    9. UpdateCode();
    10. }
    11. private unsafe void CompileImage(OffsetMoveType offsetAdder)
    12. {
    13. byte first = _ImageBuffer[0];
    14. byte least = _ImageBuffer[_ImageBuffer.Length - 1];
    15. fixed(byte* bufferPtr = _ImageBuffer ){
    16. switch (offsetAdder)//factory
    17. {
    18. case OffsetMoveType.Left:
    19. for (int i = 1; i < _ImageBuffer.Length; i++) { // Auslagerung möglich
    20. *(bufferPtr + i - 1) = *(bufferPtr + i); // |
    21. } // |
    22. *(bufferPtr + _ImageBuffer.Length - 1) = first; // |
    23. break; // | Anpassung von start i
    24. case OffsetMoveType.Right: // | Anpassung der Condition
    25. for (int i = 0; i < _ImageBuffer.Length - 1; i++) // |
    26. { // |
    27. *(bufferPtr + i + 1) = *(bufferPtr + i); // <--------. : i + 1 und i - 1
    28. }
    29. *(bufferPtr) = least;
    30. break;
    31. default:
    32. return;
    33. }
    34. }
    35. BitmapData bmpDate = _Bmp.LockBits(_BmpRect, ImageLockMode.ReadWrite, _Image.PixelFormat);
    36. Marshal.Copy(_ImageBuffer, 0, bmpDate.Scan0, _ImageBuffer.Length);
    37. _Bmp.UnlockBits(bmpDate);
    38. ImageBox.Image = _Bmp;
    39. _Offset += (int)offsetAdder;
    40. LbOffset.Text = $"{_Offset}";
    41. }
    Nix... sollte glaube ich ein Scherz sein. Irgendein Autoexpandtool für Regions, was irgendwie den Sinn von Regions vollständig untergräbt.

    Und ich stimme @'DerErfinderDesRades' zu, auch wenn wir die erklärt haben das es Partielle Klassen gibt und wie man diese implementiert rate ich dir für deine Anwendungsfall davon ab. Du wirst selber schnell merken, dass das echt nervtötend ist.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Das sorgt dafür, das regions kleiner angezeigt werden.

    "den Sinn von Regions vollständig untergräbt.",nein, sie sind immer noch da, nur sind sie kleiner geschieben um den Code kürzer zu halten


    Tool:"I Hate Regions"