Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
exe_cutable
Tutorial Leser
Tutorial Leser

Anmeldedatum: 19.05.2008
Beiträge: 43

Lokal/Statisch/Modulweit - Problem...
Verfasst am: 16.07.2008, 11:43

hi, ich bin momentan am lesen von
->Galileo Computing :: Einstieg in Visual Basic 2008
nun bin ich bei 2.1.4 Gültigkeitsbereich

dort geht es um die "Lokal"/"Statisch"/"Modulweit"-en variablen Smile

weiss nicht was ich da faltsch mache beim beispiel:

Code:
Public Class frm0203 <br />   Dim Mx As Integer <br /> <br />   Private Sub cmdAnzeigen1_Click( ... ) Handles ... <br />      Static Sx As Integer <br />      Dim x As Integer <br />      Sx = Sx + 1 <br />      Mx = Mx + 1 <br />      x = x + 1 <br />      lblAnzeige.Text = "Sx: " & Sx _ <br />         & "  x: " & x & "  MX: " & Mx <br />   End Sub <br /> <br />   Private Sub cmdAnzeigen2_Click( ... ) Handles ... <br />      Dim Mx As Integer <br />      Mx = Mx + 1 <br />      lblAnzeige.Text = "MX: " & Mx <br />   End Sub <br />End Class




als fehlermeldung kommt:
Der Name Mx wurde nicht deklariert. (zeile 7 spalte 9)
Der Name Mx wurde nicht deklariert. (zeile 7 spalte 14)
Der Name Mx wurde nicht deklariert. (zeile 10 spalte 39)


wenn es so nicht geht, kann mir das vll jemand besser erklären wie das funktioniert mit:

static ab as Integer

und

dim ab as Integer

was ist da der unterschied? ... check ich ned ganz?
wo ist es besser wenn ich static verwende? und wo dim?



@mfg exe_
 
sollniss
Überflieger
Überflieger

Anmeldedatum: 01.05.2008
Beiträge: 699


Verfasst am: 16.07.2008, 11:56

Du verwendest "Mx" 2 mal. Einmal oben und einmal in der 2. Sub.

€:
Bei mir funktioniert der Code einwandfrei.
Visual Basic: [code]
Public Class Form1
Dim Mx As Integer

Private Sub cmdAnzeigen1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnzeigen1.Click
Static Sx As Integer
Dim x As Integer
Sx = Sx + 1
Mx = Mx + 1
x = x + 1
lblAnzeige.Text = "Sx: " & Sx _
& " x: " & x & " MX: " & Mx
End Sub

Private Sub cmdAnzeigen2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnzeigen2.Click
Dim Mx As Integer
Mx = Mx + 1
lblAnzeige.Text = "MX: " & Mx
End Sub

End Class
[/code]
 
exe_cutable
Tutorial Leser
Tutorial Leser

Anmeldedatum: 19.05.2008
Beiträge: 43


Verfasst am: 16.07.2008, 13:21

(sollniss;5579)
Du verwendest "Mx" 2 mal. Einmal oben und einmal in der 2. Sub.

€:
Bei mir funktioniert der Code einwandfrei.
Visual Basic: [code]
Public Class Form1
Dim Mx As Integer

Private Sub cmdAnzeigen1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnzeigen1.Click
Static Sx As Integer
Dim x As Integer
Sx = Sx + 1
Mx = Mx + 1
x = x + 1
lblAnzeige.Text = "Sx: " & Sx _
& " x: " & x & " MX: " & Mx
End Sub

Private Sub cmdAnzeigen2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAnzeigen2.Click
Dim Mx As Integer
Mx = Mx + 1
lblAnzeige.Text = "MX: " & Mx
End Sub

End Class
[/code]



hab nun den code kopiert & eingefügt was is da faltsch :confused:





@mfg exe_
 
sollniss
Überflieger
Überflieger

Anmeldedatum: 01.05.2008
Beiträge: 699


Verfasst am: 16.07.2008, 13:26

Du hast ihn nich 1 zu 1 kopiert. Bei dir steht "Dim Mx As Integer" in der Form_Load-Sub, bei mir steht es ganz oben.
 
exe_cutable
Tutorial Leser
Tutorial Leser

Anmeldedatum: 19.05.2008
Beiträge: 43


Verfasst am: 16.07.2008, 13:57

(sollniss;5584)
Du hast ihn nich 1 zu 1 kopiert. Bei dir steht "Dim Mx As Integer" in der Form_Load-Sub, bei mir steht es ganz oben.


stimmt Very Happy

copy & paste is hald manchmal auch ned ganz einfach :p

also wenn ich das nun richtig verstanden/beobachtet habe ist der unterschied zwischen:
static ab as integer und dim ab as integer
->

wenn ich static ab as integer nehme wird zur variable "Mx" und "Sx" beim klick auf "Anzeigen1" immer +1 dazugerechnet. Nehmen wir an das ich 10x auf "Anzeigen1" geklickt habe wird folgendes stehen:
Sx: 10 x: 1 Mx: 10
Wenn ich nun auf "Anzeigen2" wechsle und danach wieder zurückgehe wird immernoch Sx: 10 x: 1 Mx: 10 stehen, durch den klick auf "Anzeigen1" wird 1 dazugerechnet= Sx: 11 x: 1 Mx: 11.


Wenn man Dim ab as integer nimmt wird zwar zur variable +1 auch beim klick dazugerechnet aber wenn ich wechsle auf "Anzeige2" und wieder zurück wird die zahl wieder bei "1" anfangen.


stimmt das? Smile

@mfg exe_
 
noname
Poster
Poster

Anmeldedatum: 01.05.2008
Beiträge: 131


Verfasst am: 16.07.2008, 15:49


Da ich aus deinem Text nicht ganz schlau werde, mach ich dir hier mal eine kleine Übersicht:

Globale Variablen:

Wenn du eine Variable ausserhalb einer Prozedur oder Funktion aber innerhalb einer Klasse deklarierst,
ist sie für diese Klasse erreichbar. Sie kann durch jede Prozedur oder Funktion in der Klasse abgerufen oder verändert werden.
Solltest du aber von einer anderen Klasse auf sie zugreifen wollen, musst du den Klassennamen vorranstellen.
Bsp:
Visual Basic: [code]Form1.Meinevariable = 2[/code]
Dies gilt nicht für Module! Globale Variablen aus Modulen sind erreichbar ohne den Namen vorranzustellen.
Die Variablen müssen als Public deklariert sein. Private oder Dim (gleicher Effekt) lassen diese Variable lokal werden.

Lokale Variablen:
Hier müssen wir zwischen 2 Typen unterscheiden. Einmal die lokalen Variablen innerhalb von Funktionen und die
Variablen innerhalb von Klassen, Modulen etc.

Die erste Variante kennt jeder:

Visual Basic: [code]
Function test() As Integer
Dim i1 As Integer = 1
Private i2 As Integer = 1
Return i1 + i2
End Function
[/code]
Die Variablen i1 und i2 sind beide lokale Variablen die NUR innerhalb der Funktion erreichbar sind!
Hier kann ich auch gut den Unterschied zwischen Dim und Static erklären:


Bei der oberen Funktion wär das Ergebnis immer 2, da i1 und i2 bei jedem Aufruf neu instanziert werden und so
den Wert 1 zugewiesen bekommen.

Visual Basic: [code]
Function test() As Integer
Static i1 As Integer = 1
i1 += 1
Return i1
End Function
[/code]

Nun wäre das erste Ergebnis 2, das zweite 3 und so weiter. Denn wenn die Variable als Static deklariert wird, wird
sie bei einem erneuten Aufruf nicht neu instanziert, dh. sie bleibt bei dem letzen Wert.


Nun zur zweiten Variante der lokalen Variablen:

Visual Basic: [code]
Public Class Form1
Public a As String
Private b As String
Dim c As String
End Class
[/code]

Die Variable a lässt sich aus der Klasse Form1 ganz einfach durch den Variablennamen erreichen. Zuweisungen von ausserhalb
der Form müssen den Klassennamen vorrantragen. (Form1.a = ...)
Die Variablen b und c lassen sich nicht von ausserhalb der Klasse Form1 erreichen, da sie Private sind.

Anmerkung:
Das hier ist längst nicht komplett..
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: visual basic, static, public, dim, unterschied

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wichtig: [Ebook] jetzt lerne ich Visual Basic 6 5067 02.06.2010, 13:55
Keine neuen Beiträge Miceosoft Visual Basic 6.0 Einsteiger Kurs? 1189 17.02.2007, 21:01
Keine neuen Beiträge SUCHE MICROSOFT VISUAL BASIC! 944 12.02.2007, 21:54
Keine neuen Beiträge Microsoft Visual Basic 1275 28.01.2007, 00:59
Keine neuen Beiträge Visual Basic.. Version?? 1230 22.01.2007, 18:23
 


[ Time: 0.0851s ][ Queries: 95 (0.0339s) ][ GZIP on - Debug on ]