Warnung BC42025 Zugriff des freigegebenen Members, ...

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

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

    Warnung BC42025 Zugriff des freigegebenen Members, ...

    Hi Gemeinde.

    Stehe gerade vor einen Fehler, den ich beim besten Willen nicht verstehe:

    Warnung BC42025 Zugriff des freigegebenen Members, konstanten Members, Enumerationsmembers oder geschachtelten Typs über eine Instanz; der qualifizierende Ausdruck wird nicht ausgewertet.

    VB.NET-Quellcode

    1. CheckedListBox1.Items.Clear()
    2. CheckedListBox1.Items.Add(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile.DesktopDirectory), True)
    3. CheckedListBox1.Items.Add(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) & "\Downloads\", True)
    4. CheckedListBox1.Items.Add(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile.MyPictures) & "\", True)


    Zeile 2 und 4 betrifft diese Fehlermeldung.
    Kann mich jemand mal aufklären was damit gemeint ist und wie ich diese Fehlermeldung wegzaubern kann. ;)
    Ausführen lässt sich dieser Teil, sprich die CheckedListBox1 wird mit Items gefüllt.

    Nachtrag: Das Hinzufügen der ​Items geschieht nach einem ​btn/cmd Ereignis (ganz einfach; Button).

    PS: Der Download-Ordner, ja - nicht der richtige Weg. ;)
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Environment.SpecialFolder.UserProfile ist bereits ein endgültiger Enum-Wert, nämlich 40. und Environment.SpecialFolder.DesktopDirectory hat den Wert 16. Das Konstrukt Environment.SpecialFolder.UserProfile.DesktopDirectory ist einfach zuviel des Guten und somit überflüssig. Die Meldung an sich finde ich etwas verwirrend, da solche Meldungen für solche Konstrukte gelten, bei denen irgendeine Klasseninstanz hergenommen wird, um auf eine Shared-Prozedur (also eine instanzunabhängige Prozedur) zuzugreifen.
    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.
    Machen wir es anders. Angenommen true und false wären nicht als eigener Datentyp festgelegt, sondern wie zu QBasic-Zeiten unbekannt. Dann würde man jetzt ein Enum dazu schreiben:

    VB.NET-Quellcode

    1. Enum BooleanValues
    2. True = -1
    3. False = 0
    4. End Enum

    Dann könnte man mit BooleanValues.True und BooleanValues.False jeweils auf die Werte zugreifen. Was Du machst, ist aber auf False zuzugreifen und dabei über True zu gehen: BooleanValues.True.False. Durch das BooleanValues.True. erhältst Du auf das False genauso Zugriff wie auf über BooleanValues., nur dass Du dabei schon einen konkreten Endwert hernimmst. Und das ist überflüssig. So ist es eben auch in Deinem Code überflüssig, über den Endwert .UserProfile auf .DesktopDirectory zugreifen zu wollen.

    Ein anderes Beispiel: Es gibt die Funktion String.IsNullOrEmpty(). Diese Shared Function gibt an, ob der übergebende Text Nothing oder gleich "" ist. Man übergibt als Parameter den zu überprüfenden Text. Nun könnte man auch versuchen, diese Funktion so aufzurufen: DeinText.IsNullOrEmpty(DeinText). Oder EinTextVonDir.IsNullOrEmpty(EinAndererText). Man nutzt also eine konkrete String-Instanz, um an diese Shared Function ranzukommen. Das gibt genau die gleiche Warnung. Weil es redundant/überflüssig ist.
    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.
    Ahhhhhhhhhhhh, jetzt hat es klick gemacht.
    Musste es leider sehr oft durchlesen.

    Also so hier:

    VB.NET-Quellcode

    1. ​CheckedListBox1.Items.Add(Environment.GetFolderPath(SpecialFolder.DesktopDirectory), True)
    2. CheckedListBox1.Items.Add(Environment.GetFolderPath(SpecialFolder.MyDocuments), True)
    3. CheckedListBox1.Items.Add(Environment.GetFolderPath(SpecialFolder.MyPictures), True)
    Grüße JackCimberly

    Deine Anfrage erledigt?
    Als erledigt markieren
    Moin!

    ich klinke mich hier einfach einmal ein, weil ich diese Meldung auch bei mit Stellen habe und nicht versehe.

    Fange einmal mit einem an.

    Das ist die betreffende Zeile:

    VB.NET-Quellcode

    1. bt_ListAllGsewAntrag.Content = _fAW_GSE_Genehmigung.GetCountGSEWAntragAsLabel(_fAW_GSE_Genehmigung.AntragAuflistung.EBL_GRUNDSTUECK, CLng(Me.GenericForm.Key))


    Die komplette Meldung lautet:

    Warnung BC42025 Zugriff des freigegebenen Members, konstanten Members, Enumerationsmembers oder geschachtelten Typs über eine Instanz; der qualifizierende Ausdruck wird nicht ausgewertet. EBL.MapEdit_Dev C:\VSProjects\EBL.MapEdit_Dev\EBL.MapEdit_Dev\EBL.MapEdit_Dev\EBL_Grundstueck.vb 362 Aktiv


    Die Klasse _fAW_GSE_Genehmigung ist eingebunden und in dieser ist die AntragAuflistung wie folgt definiert:

    VB.NET-Quellcode

    1. Public Enum AntragAuflistung
    2. EBL_GRUNDSTUECK
    3. AW_GRDST_ENTWAESSERUNG
    4. End Enum


    Die Vorschläge über die "Glühbirne" verstehe ich auch nicht...

    Gruß Jan
    Siehe Post#4. Du brauchst für den Zugriff auf WasAuchImmer keine Klasseninstanz, also kein Objekt. Hast ja nicht geschrieben, welchen Codeteil in der Zeile es genau betrifft.
    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.

    jan99 schrieb:

    Die Klasse _fAW_GSE_Genehmigung ist eingebunden
    Moment. Das ist aber wohl kein Klassenname, sondern ein Objektname, oder? Denn dann solltest Du laut Compilermeckerer schreiben:

    VB.NET-Quellcode

    1. bt_ListAllGsewAntrag.Content = _fAW_GSE_Genehmigung.GetCountGSEWAntragAsLabel(DerNameDerKlasse.AntragAuflistung.EBL_GRUNDSTUECK, CLng(Me.GenericForm.Key))

    Wobei DerNameDerKlasse eben der Name des Datentyps von _fAW_GSE_Genehmigung ist. Also: von welchem Typ ist _fAW_GSE_Genehmigung?
    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.
    Ich bekomme die gleiche Warnung. Ich hab mir durchgelesen was oben steht. Ich kann es aber leider nicht auf meine Situation anwenden bzw. verstehe immer noch nicht, was das Problem ist:

    VB.NET-Quellcode

    1. Public Class UrlaubModell
    2. Public Enum Genehmigung
    3. Beantragt
    4. Genehmigt
    5. Verweigert
    6. End Enum



    Die Warnung kommt dann in der Zeile, in der der Status auf "Beantragt" gesetzt wird.

    VB.NET-Quellcode

    1. Private Sub bnAddHoliday_Click(sender As Object, e As EventArgs) Handles bnAddHoliday.Click
    2. Dim NeuerUrlaub As New UrlaubModell
    3. NeuerUrlaub.Status = NeuerUrlaub.Genehmigung.Beantragt
    kurz: schreib einfach NeuerUrlaub.Status = UrlaubModell.Genehmigung.Beantragt
    lang: ein Urlaub bzw. eine UrlaubModell-Klasseninstanz hat seinen eigenen Zeitraum. Der 1. Urlaub von Herrn Müller hat wahrscheinlich einen anderen Zeitraum als der 3. Urlaub von Frau Meier. Und wenn sich der eine ändert, hat das keinen Einfluss auf den anderen.
    Aber: Die Genehmigungsstatusangaben sind instanzübergreifend (definiert). Die Bedeutung von Beantragt ist unabhängig von Herrn Müller und Frau Meier. Es hat immer dieselbe Bedeutung, ist also instanzunabhängig. Beantragt steht immer für den Integerwert 0 (solange Du es so mit der Enum-Definition beibehältst). Daher sagt der Compiler Dir: »Ist ja ganz schön, dass Du extra ne UrlaubModell-Instanz verwenden willst, um einen Genehmigungsstatus festzulegen, das musst Du aber nicht. Es reicht, wenn Du diesen Status über die Klasse an sich festlegst. Mach es Dir also nicht allzu kompliziert.«
    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.