Alle Instanzen eines UserControls zur Laufzeit finden

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

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Alle Instanzen eines UserControls zur Laufzeit finden

    Hallo,
    meine Anwendung besteht aus einer Vielzahl von Forms.
    So ziemlich alle diese Foms haben jeweils ein TabControl mit mehreren TabPages.
    Jeweils auf genau einer TabPage ist ein UserControl zu finden.
    Ich bin auf der Suche nach einer Möglichkeit alle diese Instanzen des UserControls zur Laufzeit zu finden und deren .Enable Eigenschaft zu setzen.
    Momantan mache ich das so:

    VB.NET-Quellcode

    1. Private Sub EnableDisableAll_uc_DataLogger(bNotEnable As Boolean)
    2. For Each _frm As Form In My.Application.OpenForms
    3. For Each _tc As Control In _frm.Controls.OfType(Of TabControl)()
    4. For Each _tp As TabPage In _tc.Controls.OfType(Of TabPage)()
    5. For Each _uc As uc_DataLogger In _tp.Controls.OfType(Of uc_DataLogger)()
    6. _uc.Enabled = Not bNotEnable
    7. Next _uc
    8. Next _tp
    9. Next _tc
    10. Next _frm
    11. End Sub

    Gibt es nicht einen For..Next Aufruf, der einfach gesagt, die gesamte laufende Anwendung nach einem bestimmten UserControl Typ durchsucht?
    Oder mache ich das schon optimiert?
    @roepke Ich mache das so (musst Du nur noch nach VB.NET übersetzen:

    C#-Quellcode

    1. /// <summary>
    2. /// Prozedur zum Auflisten aller Controls des gegebenen Types
    3. /// </summary>
    4. /// <param name="control">das haltende Control (Form, Panel, ...)</param>
    5. /// <param name="type">der zu testende Type, kann auch Basisklasse sein</param>
    6. /// <returns>die Auflistung</returns>
    7. private static IEnumerable<Control> GetAllType(Control control, Type type)
    8. {
    9. IEnumerable<Control> controls = control.Controls.Cast<Control>();
    10. return controls.SelectMany(ctrl => GetAll(ctrl, type))
    11. .Concat(controls)
    12. .Where(c => c.GetType() == type);
    13. }
    Und schau auch mal hier rein: Finden aller Controls mit gemeinsamer Basisklasse in einer Form mit TabControls
    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!