Steuerelement in Groupbox aus Modul ansprechen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    @RodFromGermany
    Die beiden Fehler habe ich berichtigt und es läuft auch mit "Option strict on" alles fehlerfrei

    @all
    Was liefert denn der Aufruf der .parent Eigenschaft als Wert zurück und besonders in welchem Format?
    UND: Wenn ihr mir empfehlt, die Maschinensachen in Klassen zu packen, wie müsste das aussehen. Ich will keinen fertigen Code, nur mal so n Anstupser, ich arbeite mich da schon irgendwie rein.

    DANKE!!!
    ==> seid .net zueinander :D <3 <==

    VB.NET-Quellcode

    1. Public Class MyMashine
    2. Public Property Speed As Integer 'wenn es Integer ist
    3. Public Property html As String
    4. Public Property led As ... 'was ist da eigentlich bei dir? Farbe? Dann "As Color"


    Wenn du dann die Objekte anlegst und in die List schiebst, kannst du über die Liste auf sie zugreifen und die Propertys beschreiben:

    VB.NET-Quellcode

    1. Dim lstMash(Of MyMashine)
    2. .......
    3. 'irgendwo in einer Sub
    4. lstMash.Add(New MyMash)
    5. ....
    6. lstMash(index).Speed=45 'oder welchen Wert du aus der XML ausgelesen hast...
    "Warum in die Ferne schweifen..."
    Zunächst die Lösung meines ursprünglichen Problems. Mit

    VB.NET-Quellcode

    1. frm_main.Controls("grp_ma" & ma_nummer).Controls("lbl_speed" & ma_nummer).Text = Speed

    macht er genau das was ich wollte. Ich hatte mir bisher nur nicht "getraut" zweimal das ".Controls" hintereinander und dann die Definition in Klammern zu schreiben.

    Davon abgesehen werde ich mich aber nun mal intensiver mit Klassen beschäftigen um die ganze Sache noch etwas zu optimieren.

    DANKE euch allen für die ausführlichen Hilfestellungen, super Forum, wirklich :thumbsup:
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    um die ganze Sache noch etwas zu optimieren
    Du hantierst mit den Namen von Controls:

    Axxxxxl schrieb:

    VB.NET-Quellcode

    1. Controls("grp_ma" & ma_nummer)
    das ist suboptimal. So bist Du nicht in der Lage, z.B. die Controls umzubenennen und Du merkst nicht, dass dann der Code nicht funktionieren würde, weil der Compiler Namenszugriffe nicht checken kann.
    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!

    RodFromGermany schrieb:

    weil der Compiler Namenszugriffe nicht checken kann.
    ==> Compile-Zeit.

    sonne75 schrieb:

    Exception
    ==> Laufzeit.
    Nicht mit jedem Lauf kommt ein Programm bei allen implementierten Codezeilen vorbei.
    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!
    Und täglich grüßt das Murmeltier:
    Ich denke, dem einen oder anderen ist ebenso klar wie mir, dass - falls in @Axxxxxls Anwendung neben den Maschinen noch weitere Dinge vorkommen, dass er über kurz oder lang auf das Instrumentarium relationaler Datenverarbeitung umsteigen muss (wird).

    Ich weiß, ihr holt ihn ab, wo er grad steht, und ich bin mal wieder böse Kassandra, wo prophezeit, dass es früher oder später komplett inne Tonne landet. (jedenfalls besser wärs, vom Gesichtspunkt der Wartbarkeit her).

    @Axxxxxl: Falls Neugier - fragen ;)
    So, jetzt mal nicht die Nerven verlieren. Jedes Posting ist hilfreich und ob der Thread nun 1km lang ist - egal, kost ja nüscht und vielleicht findet ihn der ein oder andere ja auch noch hilfreich für ähnliche Probleme!
    Wie gesagt habe ich vor Jahren mal einfaches VB6 programmiert und bis vor kurzem keinen Kontakt mehr dazu. Da ist man dann gleich bissl überfordert wenn einem die Hinweise mit Fachbegriffen hier um die Ohren fliegen. Ich löse es erstmal so, dass es für mich verständlich ist und funktioniert und dann wird optimiert und umgebaut.

    Übrigens:
    Wie heute geschrieben, kann ich nun aus der Sub auf fast(!) alle Controls zugreifen. Nur bei 2 Dingen verweigert er noch, bei einem Progressbar und einem Imagefeld. Wenn ich zB schreibe:

    VB.NET-Quellcode

    1. frm_main.Controls("grp_ma" & ma_nummer).Controls("bar_" & ma_nummer).Value = Speed
    meckert er "Value ist kein Member von System.Windows.Forms.Controls"

    Irgendwelche Hinweise zur Ergreifung des "Täters" ?
    ==> seid .net zueinander :D <3 <==
    Ctype (frm_main.Controls("grp_ma" & ma_nummer).Controls("bar_" & ma_nummer), progressbar).Value =
    Du musst dem Ding mitteilen das es eine Proressbar ist. Denn er hat recht.. Value gibt es bei Controls nicht.
    *g* ist zwar auch nicht die feine Englische... aber das fällt momentan kaum auf.. he he
    Das liegt daran, dass Form.Controls dir logischerweise ein Objekt der Klasse Control zurückgibt, welches keine Property Value hat. Progressbar ist eine Klasse, die von Control abgeleitet und um einiges ergänzt worden ist, u.a. um Value.
    D.h. du musst das Control dann mit DirectCast() in Progressbar wandeln, dann kannst du auf spezifische Eigenschaften und Methoden zugreifen.

    EDIT: zu langsam

    sonne75 schrieb:

    Ich habe in meinem Projekt ein riesen DataSet und trotzdem noch Klassen, List(Of) usw
    Dein Projekt ist auch besonders komplex und insbes. wg. der Threading-Problematik sehr speziell.

    Jdfs sowas:

    VB.NET-Quellcode

    1. frm_main.Controls("grp_ma" & ma_nummer).Controls("lbl_speed" & ma_nummer).Text = Speed
    hast du hoffentlich nicht.
    Nein, natürlich nicht :) Ich habe aber viele Klassen, die halt die Methoden zur spezifischen Datenverarbeitung (Rohdaten, nicht aus dem DataSet) bereithalten, die kann ich ja nicht im DataSet unterbringen.

    Aber dazu haben wir ja gesagt, und Klassen und List(Of) wären für ihn viel einfacher zu handeln, als sich gleich in DataSet usw einzuarbeiten, wenn er (fast) von Null anfängt.
    Wenn er nur das Bisschen Daten aus XML ausliest und anzeigen will, dann reicht ihm das auch...
    Wenns nervt bitte melden aber ich habe da noch ne Frage :whistling:
    Jetzt wird erstmal alles so aktualisiert wie es sein soll. Das einzige Problem ist immer noch der jeweilige Progressbar. Den Code:

    VB.NET-Quellcode

    1. CType(frm_main.Controls("grp_ma" & ma_nummer).Controls.Item("bar_" & ma_nummer), ProgressBar).Value = Speed

    akzeptiert er zwar ohne zu Murren aber er aktualisiert ihn leider nicht. Der Wert "Speed" (String) stimmt aber denn der wird ja als Wert auch in einem Label ausgegeben und jedesmal erneuert.

    Sicherlich würde mein Quellcode jedem Meisterprogrammer zum Ko... bringen aber ich muss mit den Mitteln arbeiten, die ich kenne. Da das Programm von mir auch nicht geheim ist, kann ich dem der will, das ganze Projekt gern mal zukommen lassen und ihr schaut mal, was da für Änderungspotential bestehen würde. Dabei würden natürlich die Maschinenwerte aus der XML fehlen, da ich die nicht mitschicken kann.
    ==> seid .net zueinander :D <3 <==
    Wenn Speed ein String ist, kann die Progressbar vielleicht damit nichts anfangen? Mach doch ein CInt(String) draus.

    Welche Werte (von wo bis wo) will deine Progressbar haben? Hast du sie schon überhaupt mal angesprochen?

    Axxxxxl schrieb:

    meckert er "Value ist kein Member von System.Windows.Forms.Controls"

    RodFromGermany schrieb:

    und Du merkst nicht, dass dann der Code nicht funktionieren würde, weil der Compiler Namenszugriffe nicht checken kann.
    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!

    sonne75 schrieb:

    und müsste eine Exception bekommen
    Er schreibt so was:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. CType(Me.Controls("grp_ma123").Controls.Item("bar_123"), ProgressBar).Value = 17
    3. End Sub
    Und dieser Code compiliert, läuft aber nicht, denn ich habe weder ein Panel "grp_ma123" noch eine ProgressBar "bar_123", weil er über die Namen der Controls zugreift, die können erst zur Laufzeit überprüft werden.
    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!