Hi!
Die Dinge sind unserer Erkenntnis nach manchmal nicht so einfach wie sie scheinen... Hier ein paar Statements eines unserer Entwickler zu dem Thema.
MfG
Christian
----schnipp schnapp----schnipp schnapp----schnipp schnapp--
Klammer oder nicht Klammer, das ist die Frage!
Wahrscheinlich ist den meisten VB-Autodidakten schon die merkwürdige Syntax von VB bezüglich Klammerung von Funktionsparametern aufgefallen: Gibt es nur einen Parameter, darf man ihn klammern, bei zweien aber nicht, es sei denn, man schreibt Call davor usw. usf.
Die Erklärung dafür ist folgende:
Bei Aufrufen ohne Call bedeutet die Klammerung eines Parameters, dass er als Konstante übergeben wird. Auch wenn der Parameter als ByRef definiert ist, kann er dann nicht verändert werden.
Beispiel:
Private Sub Hugo (ByRef i as int)
i = 3
End Sub
...
Dim x as Integer
x = 2
Hugo (x)
' hier ist x immer noch 2
Ohne Klammern beim Aufruf von Hugo wäre x jetzt 3.
Deshalb ist es auch nicht erlaubt, zwei Parameter zu klammern.
Beispiel
Private Sub Hugo (ByRef i as int, j as int)
i = 3
End Sub
...
Dim x as Integer
Dim y as Integer
x = 2
y = 3
Hugo (x,y) ' ! Fehler, es können nicht zwei Parameter zur Konstante werden
Hugo x, y ' Übergabe ByRef (wenn Parameter in Routine so definiert sind)
Hugo (x),(y) ' Erlaubt, Übergabe beider Parameter als Konstante
Anders ist es, wenn der Funktionsaufruf mit Call erfolgt. Hier ist immer eine Klammerung der Parameterliste notwendig. Man darf aber zusätzlich einzelne Parameter klammern, wenn man sie als Konstanten übergeben will.
Beispiel:
Private Sub Hugo (ByRef i as int, j as int)
i = 3
End Sub
...
Dim x as Integer
Dim y as Integer
x = 2
y = 3
Call Hugo (x,y) ' Übergabe ByRef (wenn Parameter in Routine so definiert sind)
Call Hugo ((x),(y)) ' Erlaubt, Übergabe beider Parameter als Konstante
Bischen pervers ist das Ganze natürlich, weil man einfach das ByRef-Verhalten ausschalten kann. Wichtig ist nur, dass man auch weiss, wenn man das macht, und die Klammern nicht nur nach Lust und Laune oder aus ästhetischen Gründen setzt.