| |
VB.NET - Ein- und UmsteigerVariable wurde nicht deklariert ? | | | Autor: Major Kottan | Datum: 21.07.18 10:29 |
| Hallo,
Ich habe folgendes Problem in einer Funktion in einem Klassenmodul:
Function Einlesen() As String()
Dim Untouched As Boolean
Dim TmpValue As String
Dim I As Integer
Dim ArrLaenge As Integer
dateiliste = Directory.GetFiles(verzeichnis, "*.*")
ArrLaenge = dateiliste.Length - 1
Do
Untouched = True
For I = 0 To ArrLaenge - 1
If File.GetCreationTime(dateiliste(I)) > _
File.GetCreationTime(dateiliste(I + 1)) Then
TmpValue = dateiliste(I)
dateiliste(I) = dateiliste(I + 1)
dateiliste(I + 1) = TmpValue
Untouched = False
End If
Next I
Loop Until Untouched
Return dateiliste
End Function Fehlermeldung:"ArrLaenge wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich."
Warum des steht doch da: Dim ArrLaenge As Integer ?
Bin neu eingestiegen in die VB Programmierung. Bitte um Hilfestellung, was ich da übersehe. | |
Re: Variable wurde nicht deklariert ? | | | Autor: Kuno60 | Datum: 21.07.18 14:26 |
| Hallo,
"ArrLaenge" ist deklariert, aber "dateiliste" und "verzeichnis" sind nicht deklariert (zumindest nicht innerhalb dieser Funktion).
Wo genau tritt denn der Fehler auf?
Ansonsten ist die Funktion richtig.
So kann man es auch schreiben (liefert das gleiche Ergebnis):
Function Einlesen(verzeichnis As String) As String()
Dim di As New DirectoryInfo(verzeichnis)
Dim dateiliste = From f In di.EnumerateFiles
Order By f.CreationTime
Select f.FullName
Return dateiliste.ToArray
End Function | |
Re: Variable wurde nicht deklariert ? | | | Autor: Major Kottan | Datum: 21.07.18 18:05 |
| Danke Kuno für die Alternative. Sieht einfacher aus und muß ich danach probieren.
Möchte aber stehen, warum mein Code nicht funktioniert.
dateiliste und verzeichnis sind als Variablen im Klassenmodul definiert.
Public Class cDateiListe
Private datanzahl As Integer
Private dateiliste() As String
Private verzeichnis As String
Private verzeichnis_Laenge As Byte
Private datName As String Wenn ich meinen Code jetzt im Einzelschrittmodus debugge,
Function Einlesen() As String()
Dim Untouched As Boolean
Dim TmpValue As String
Dim I As Integer
Dim ArrLaenge As Integer
dateiliste = Directory.GetFiles(verzeichnis, "*.*")
ArrLaenge = dateiliste.Length - 1
Do
Untouched = True
For I = 0 To ArrLaenge - 1
If File.GetCreationTime(dateiliste(I)) > _
File.GetCreationTime(dateiliste(I + 1)) Then
TmpValue = dateiliste(I)
dateiliste(I) = dateiliste(I + 1)
dateiliste(I + 1) = TmpValue
Untouched = False
End If
Next I
Loop Until Untouched
Return dateiliste
End Function dann sehe ich daß datiliste.Legnth der Wert 84 zugewiesen wird, ArrLaenge jedoch nichts ??
Fehlermeldung: error BC34051"ArrLaenge wurde nicht deklariert. Aufgrund der Schutzstufe ist unter Umständen kein Zugriff möglich."
Was aber offenbar nicht stimmt. Und I durchläuft die For Next Schleife trotzdem bis 83 ?
Ah sehe gerade, offenbar bezieht sich der Fehler nur auf das Überwachungsfenster ??!
Etwas unverständlich für mich. | |
Re: Variable wurde nicht deklariert ? | | | Autor: Manfred X | Datum: 22.07.18 07:51 |
| Ich habe versucht, Dein Problem mal schnell zu reproduzieren (VS 2017).
Weder im lokalen noch im allgemeinen Überwachungsfenster traten
bei der Variable "arrLaenge" Ausnahme-Meldungen auf.
Deine Klasse ist - so weit Du den Code gepostet hast - "seltsam" strukturiert
Sollte das nicht eher so oder ähnlich aussehen?
(Properties, Membervariablen, interne (private) Methoden)
Public Class cDateiliste
'Interne Datenhaltung
Private _dateiliste() As String
Private _verzeichnis As String
'??????????
'Private datanzahl As Integer
'Private verzeichnis_Laenge As Byte
'Private datName As String
Public Property Verzeichnis As String
Set(value As String)
_verzeichnis = value
Einlesen()
End Set
Get
Return _verzeichnis
End Get
End Property
'evt. Friend/Private
Public ReadOnly Property Dateiliste As String()
Get
Return _dateiliste
End Get
End Property
Private Sub Einlesen()
_dateiliste = (From fi As IO.FileInfo In
New IO.DirectoryInfo(_verzeichnis).EnumerateFiles
Order By fi.CreationTime Ascending
Select fi.FullName).ToArray
End Sub
End Class
Beitrag wurde zuletzt am 22.07.18 um 07:53:26 editiert. | |
Re: Variable wurde nicht deklariert ? | | | Autor: Major Kottan | Datum: 22.07.18 09:34 |
| Vielen Dank an Kuno,
Dein viel kürzerer und einfacherer Code hat das Problem sehr schnell gelöst.
Gibt halt noch viel zu lernen. Vorallem weiß ich offenbar nicht, daß eine viel einfachere Lösung existiert und ich versuche deswegen die kompliziertere (das Array zu sortieren) ... | |
Re: Variable wurde nicht deklariert ? | | | Autor: Manfred X | Datum: 22.07.18 10:37 |
| Hallo!
Nein. Der Vorschlag von Kuno60 ist zwar kürzer,
hat aber mit Deinem eingangs geschilderten Problem nichts zu tun.
Dein Code zum Sortieren war zwar "umständlich", aber syntaktisch
korrekt.
Manchmal hilft es in solchen Fällen, das PDB-File der Projekt-
Konfiguration zu löschen und das Projekt danach neu zu erstellen. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|