"A" kann nicht außerhalb von "Form 1"

  • VB.NET

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

    "A" kann nicht außerhalb von "Form 1"

    Moin,

    ich mal wieder :)

    Nun aber mit einem bissl komplexerem Problem ...

    Nun Mein Fehler liegt in 2 Code Abschnitten. Nun beide sind eig. die selben.

    Jedenfalls ist hier mein Problem...

    VB.NET-Quellcode

    1. Sub AufgabeAktualisieren(ByVal A As Aufgabe) ' < Fehler
    2. A.Beschreibung = tbBeschreibung.Text
    3. A.Kategorie = cbKategorien.Text
    4. A.Prioritaet = AktuellePrioritaet
    5. A.Erledigt = ckErledigt.Checked
    6. End Sub


    Und hier


    VB.NET-Quellcode

    1. Sub AufgabAnzeigen(ByVal A As Aufgabe) '< Fehler
    2. tbBeschreibung.Text = A.Beschreibung
    3. If cbKategorien.FindStringExact(A.Kategorie) >= 0 Then
    4. cbKategorien.SelectedIndex = cbKategorien.FindStringExact(A.Kategorie)
    5. Else
    6. cbKategorien.SelectedIndex = 0
    7. End If
    8. Select Case A.Prioritaet
    9. Case AktuellePrioritaet.SehrWichtig
    10. rbSehrWichtig.Checked = True
    11. Case AktuellePrioritaet.Normal
    12. rbNormal.Checked = True
    13. Case AktuellePrioritaet.NichtWichtig
    14. rbNichtWichtig.Checked = True
    15. Case Else
    16. End Select
    17. ckErledigt.Checked = A.Erledigt
    18. lbDatumAufgabe.Text = A.Datum
    19. End Sub
    20. End Class


    Beides mal kommt

    " Fehler 2 "A" kann den Aufgabe-Typ nicht außerhalb des Projekts über class "Form1" verfügbar machen."
    Hab es schon unterhalb von "Form1" Gelegt und überhalb aber nichts hat geklappt... :(

    Danke im vorraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „M.Opera“ ()

    Schreib anstatt A String

    Also so:

    VB.NET-Quellcode

    1. Sub AufgabeAktualisieren(ByVal A As String) As String


    Du schreibst ja drunter mit Textboxen weiter

    Samus Aran schrieb:

    Du kannst Subs keinen Typ zuweisen, das geht nur bei Functions m)
    Deklarier die Sub mal als Public, wenn das nicht geht, als Public Shared.
    Meinst du dies hier ?




    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private AlleAufgaben As Dictionary(Of Date, Aufgabe)
    4. Private AktuellePrioritaet
    5. Private AktuellesDatum As Date
    6. Private AufgabenDateipfad As String = "Aufgabenplaner.dat"
    7. Private AufgabeWurdegeaendert As Boolean


    oder "Public Sub...."

    Samus Aran schrieb:

    Wenn ich Sub schreibe, meine ich Sub. Nicht Class oder wasauchimmer. ;)
    Geht nicht :( Hab jetzt mal im Buch nach geschlagen... "Markt + Technik, Jetzt lerne ich Visual Basic 2010"
    Und dort ist es auch mit Sub geschrieben... Haben die es jetzt im Buch auch Falsch oO Hatte vor das Buch meiner kleinen Schwester zu geben und da will man ja nicht das sie was Falsches lernt...

    M.Opera schrieb:

    "Markt + Technik, Jetzt lerne ich Visual Basic 2010"
    Also der Verlag "Markt+Technik" hat sich vor längerer Zeit mal bei mir ins gehirn eingegraben als der Produzent der schlechtesten Software-Bücher, die ühaupt zu kriegen sind.
    Auch wenns lange her ist: mit äußerster Vorsicht genießen!

    Wenn du proggen lernen willst, ohne Mist aufzunehmen, dende dir später wieder mühsam abgewöhnen mußt: dieses Buch Lesen. Das ist ein erwiesenermaßen ausgezeichnetes Buch, da kannstedich drauf verlassen.

    zum Problem: Deklariere die Aufgabe-Klasse als Public, dann kann sie auch ausserhalb von Form1 verfügbar gemacht werden.

    Oder deklariere "AktualisiereAufgabe()" und Konsorten als Nicht-Public.

    Der Fehler liegt darin, dass AktualisiereAufgabe(A As Aufgabe) public ist, also von überall aus aufgerufen werden kann. Aufgabe ist aber nicht Public, und dadurch entsteht die unmögliche Situation, dass ein Aufrufer zwar die Methode aufrufen kann, aber keine Möglichkeit hat, das erforderliche Argument zu übergeben.

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

    ErfinderDesRades schrieb:

    M.Opera schrieb:

    "Markt + Technik, Jetzt lerne ich Visual Basic 2010"
    [...]
    Wenn du proggen lernen willst: dieses Buch Lesen

    [...]
    Etwas kann ich ja :) Aber sollte ja für meine kleine Schwester sein... Und im Buchhandel beim drüber fliegen fand ich es als einfach deswegen hab ich ja dieses und 2 weitere gekauft (andere Verläge 1 mal von "Thomas Theis Einstig in VB 2010" und einmal "Jürgen Katz erfolgreich Visual Basic 2010 programmieren" ) :)

    ErfinderDesRades schrieb:

    M.Opera schrieb:

    "Markt + Technik, Jetzt lerne ich Visual Basic 2010"
    Also der Verlag "Markt+Technik" hat sich vor längerer Zeit mal bei mir ins gehirn eingegraben als der Produzent der schlechtesten Software-Bücher, die ühaupt zu kriegen sind.
    Aber ist lange her.

    Hab ich erst gemerkt als sie Anfingen irgendwelche Prozeduren hin zu schreiben und wenn man dann den Fehler als "Neue Methode" bearbeitet tauch ganz unten oder zwei Seiten weiter der Text " Fügen Sie die Prozedur ... ein :" Nun hat man aber schon die Methode dafür...



    zum Problem: Deklariere die Aufgabe-Klasse als Public, dann kann sie auch ausserhalb von Form1 verfügbar gemacht werden.
    Oder deklariere "AktualisiereAufgabe()" und Konsorten als Nicht-Public.


    Der Fehler liegt darin, dass AktualisiereAufgabe(A As Aufgabe) public ist, also von überall aus aufgerufen werden kann. Aufgabe ist aber nicht Public, und dadurch entsteht die unmögliche Situation, dass ein Aufrufer zwar die Methode aufrufen kann, aber keine Möglichkeit hat, das erforderliche Argument zu übergeben.
    Nun... kapier ich nicht ?( Bin nicht dumm kapier auch einiges aber das kapier ich nicht oO

    Also hoffe das ich richtig liege:

    "AktualiesiereAufgabe(ByVal A As Aufgabe) ist Public das heißt Allgemein abrufbar vom Aufrufer... Aber das was es tun soll ist nicht Public und deswegen klappt das nicht ?? "

    M.Opera schrieb:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Private AlleAufgaben As Dictionary(Of Date, Aufgabe)
    4. Private AktuellePrioritaet
    5. Private AktuellesDatum As Date
    6. Private AufgabenDateipfad As String = "Aufgabenplaner.dat"
    7. Private AufgabeWurdegeaendert As Boolean

    oder "Public Sub...."
    Mach es mal so:

    VB.NET-Quellcode

    1. Public AlleAufgaben As Dictionary(Of Date, Aufgabe)
    2. Public AktuellePrioritaet As IRGEND_ETWAS
    3. Public AktuellesDatum As Date
    4. Public AufgabenDateipfad As String = "Aufgabenplaner.dat"
    5. Public AufgabeWurdegeaendert As Boolean
    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!
    Ich denke das war anders gemeint.
    Siehe hier:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub Bla(ByVal Argument As Aufgabe)
    3. End Sub
    4. Private Class Aufgabe
    5. End Class
    6. End Class
    7. Public Class Form2
    8. End Class


    Hier hast Du folgendes Problem:
    Wenn Form2 auf "Public Sub Bla(ByVal Argument As Aufgabe)" aus Form1 zugreifen will geht das zwar, aber Form2 muss als Argument eine Instanz der Klasse Aufgabe übergeben.
    Das ist aber unmöglich, weil Form2 nicht auf Form1.Aufgabe zugreifen kann, weil diese Klasse Private ist.

    Du musst also "Private Class Aufgabe" umschreiben zu "Public Class Aufgabe".
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @TE:
    Poste mal den Deklarationscode (keine Funktionsinhalte und so) von Class Aufgabe
    Das allein sollte genügen, Dir zu helfen. :thumbup:
    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!