Forums Neueste Beiträge
 

Probleme mit ByRef

25/08/2009 - 11:17 von Trudy Momo | Report spam
Guten Tag,

ich bin noch rel. neu auf dem Gebiet und hab deswegen ein bisschen ein
Gewurstel und weiss nicht mehr weiter. Vielleicht kann mir ja jemand von
euch weiterhelfen.

Ich habe eine Applikation, die mir eine Lohnarten-Collection in ein Array
schreibt. Jede dieser Lohnarten kann sowohl einen Über- wie auch einen
Unterstrich haben (Over- / Underline). Damit ich den Code, für das checken
ob die aktuelle Position einen Unterstrich hat, mehrmals schreiben muss,
habe ich diese Funktionalitàt in eine separate Sub ausgelagert. Das Array,
in das ich schreiben möchte gebe ich als ByRef Parameter mit, zusammen mit
der aktuellen Lohnart und der Position, die es dann im Array einnehmen soll
(alles wunderbar dynamisch).

Wenn ich nun das Programm laufen lasse, dann wird zwar in der
"Unterstrich-Check" Funktion selbst, das Array richtig befüllt, aber sobald
ich wieder rausspringe, werden die Felder auf den ursprünglichen Wert
zurückgesetzt. Was mache ich genau falsch? Sollte das ByRef nicht genau das
bewirken, dass ich in einer anderen Funktion, den Wert àndern kann?

Ich erlaube mir noch den Code beizufügen:

Private Sub MainFunction()
...
...
UnderlineToArray(myArray, cwt, rowCounter) /Sobald ich hier aus der Sub
zurückkomme sind die Werte wieder zurückgesetzt

End Sub


Private Sub UnderlineToArray(ByRef myArray(,) As String, ByVal cwt As
CalcWageType, ByVal row As Integer)
If CBool(String.Equals(cwt.LineTypeUnder.UnderLineType, "dashed"))
Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"dotted")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"double")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"transparent")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"solid")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

End If
/Hier sind die Werte im myArray noch
richtig
End Sub


Besten Danke schon im Voraus

Trudy
 

Lesen sie die antworten

#1 Marcel Garaventa
25/08/2009 - 11:59 | Warnen spam
Hallo Trudy

Eigentlich sollte es gehen, aber ich sehe hier Dein Code nicht.
Grundsàtzlich werden Objekte (Klassen) sowieso als Referenz also ByRef
übergeben auch wenn man ByVal schriebt.

Du hast allerdings gar keine Funktion gemacht sondern eben eine Sub. Eine
Funktion würde so aussehen:

Public Function Unterstrich-Check( cLohnart as Collection) as Collection
.
.
return cLohnart
end Function

Der Aufruf würde dann etwas so aussehen:

Dim myLohnart as Collection
Dim myLohnartVeràndert as Collection
.
myLohnartVeràndert = Unterstrich-Check(myLohnart)

Gruss Marcel

"Trudy Momo" wrote:

Guten Tag,

ich bin noch rel. neu auf dem Gebiet und hab deswegen ein bisschen ein
Gewurstel und weiss nicht mehr weiter. Vielleicht kann mir ja jemand von
euch weiterhelfen.

Ich habe eine Applikation, die mir eine Lohnarten-Collection in ein Array
schreibt. Jede dieser Lohnarten kann sowohl einen Über- wie auch einen
Unterstrich haben (Over- / Underline). Damit ich den Code, für das checken
ob die aktuelle Position einen Unterstrich hat, mehrmals schreiben muss,
habe ich diese Funktionalitàt in eine separate Sub ausgelagert. Das Array,
in das ich schreiben möchte gebe ich als ByRef Parameter mit, zusammen mit
der aktuellen Lohnart und der Position, die es dann im Array einnehmen soll
(alles wunderbar dynamisch).

Wenn ich nun das Programm laufen lasse, dann wird zwar in der
"Unterstrich-Check" Funktion selbst, das Array richtig befüllt, aber sobald
ich wieder rausspringe, werden die Felder auf den ursprünglichen Wert
zurückgesetzt. Was mache ich genau falsch? Sollte das ByRef nicht genau das
bewirken, dass ich in einer anderen Funktion, den Wert àndern kann?

Ich erlaube mir noch den Code beizufügen:

Private Sub MainFunction()
...
...
UnderlineToArray(myArray, cwt, rowCounter) /Sobald ich hier aus der Sub
zurückkomme sind die Werte wieder zurückgesetzt

End Sub


Private Sub UnderlineToArray(ByRef myArray(,) As String, ByVal cwt As
CalcWageType, ByVal row As Integer)
If CBool(String.Equals(cwt.LineTypeUnder.UnderLineType, "dashed"))
Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"dotted")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"double")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"transparent")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

ElseIf CBool(String.Equals(cwt.LineTypeUnder.UnderLineType,
"solid")) Then
myArray(rowCounter, 4) = CStr(1)
myArray(rowCounter, 5) = cwt.LineTypeUnder.UnderLineType

End If
/Hier sind die Werte im myArray noch
richtig
End Sub


Besten Danke schon im Voraus

Trudy


Ähnliche fragen