VisualBasic Objekte per Schlaufe generieren

nickless_86

Commander
Registriert
Juli 2009
Beiträge
2.121
Hallo Community, steh grad aufm Schlauch, will Objekte mit einem Index generieren, doch bring es nicht hin...
Sowas wie ich es rot markiert habe will ich, funzt so jedoch nicht

...For index = 1 To NumbersofZyl
CreateZyl(index)
Next...


...Public Sub CreateZyl(ByVal Index As Integer)
Dim Zyl +Index As Zylinderelement = New Zylinderelement("Zylinder." + Index.ToString, 100, 45.0)

End Sub

Danke Im Voraus
 
Also ich kann zwar kein VB aber in den Programmiersprachen die ich kenne kann man einer Variable keinen Dynamischen namen geben.
Am besten speicherst deine Zylinder in einem Array oder eine Liste an der Index Position.
Also

Zylinder[] listevonZylindern= new Zylinder[50]; (natürlich geht das so nicht in vb, aber du solltest ein Array von Zylindern erzeugen)
listevonZylindern[index] = New Zylinderelement("Zylinder." + Index.ToString, 100, 45.0)

wie das syntaktisch in vb aussehn muss weiß ich leider nicht
 
Zuletzt bearbeitet:
Dim Zyl(NumbersofZyl) As Zylinderelement;


...Public Sub CreateZyl(ByVal Index As Integer)
Zyl(Index) = New Zylinderelement("Zylinder." + Index.ToString, 100, 45.0)

End Sub
 
sollte funktionieren danke... Dachte könnte ev. ohne array gehen!
 
Also es ist zwar in einigen Sprachen möglich Dynamische Objecte zu erzeugen. Aber Prinzipell ist davon abzuraten. Um einen Array kommst du bei sowas nie rum.
 
Kenn mich mit Visual Basic (=eh ein Schei...) zwar nicht aus, aber des sieht irgendwie schon irgendiwe schlecht aus. Ich nehme mal an du willst in der Schlaufe die Cylinder-Objekte erzeugen und in einem Array speichern.
Das Problem ist,daß Du in obigem Beispiel bei jedem Schleifendurchlauf ein neues "Array" erzeugst, d.h. ich tät ein Array entsprechender Größe vor der Schlaufe erzeugen und in der Schlaufe nur noch füllen, also in JAVA,C++ etwa so:

( Achtung, PSeudoCode !)

int numOfObjects = 32;
Dim Array ar[] = new Array[numOfObjects];
for(int index = 0; index < numOfObjects; i++)
{
ar[index] = new CylinderObject("Zylinder"+i, arg1,arg2 ....);
}

Was bei dir glaub ich der Hauptfehler ist, ist die Variablendefinition
Dim Zyl+index
in der Schlaufe, sowas gibt es nicht. Du kannst nicht Einzelvariablen definieren indem du zu einer Variable pro Definitionsdurchgang einen Integerwert dazuaddierst, solche Definitionen gibts meines Wissens in keiner Computersprache (macht auch wenig Sinn), man nimmt hier Arrays.


Daneben könnte man noch dynamische Arrays verwenden, das sind Container (z.B. LinkedLists , Vector), die am Anfang leer sind und mit der Anzahl der hinzugefügten Elemente "mitwachsen"; verwendet werden diese dynamischen Arrays, wenn man zum Definitionszeitpunkt nicht weiß wieviel Elemente ins Array hinzugefügt werden sollen, man also kein fixes Array mit einer bestimmten Länge erzeugen kann. (wobei in WischiWaschual Basic und Datentypen eh viele egal diese der dynamische oder der fixe...)
 
Habe es mit einem Array gelöst, der anschliessend falls benötigt mit redim vergrössert oder verkleinert wird.
Danke nochmals
 
Einfaches Generieren:

Dim Zylinders(ZylinderCount-1) as Zylinder

For i As Integer=0 to ZylinderCount-1
Zylinders(i)=New Zylinder("Zylinder." & i, 100,45)
Next


Das mit ReDim vergiss gleich wieder. Das ist nämlich von der Performance eine Katastrophe.
Ich würde stattdess eine Liste empfehlen. Die kannst du wie ein Array über Indizes ansprechen, kannst aber sehr einfach Elemente mit .Add hinzufügen.

Dim Zylinders As New List(Of Zylinder)()

For i As Integer=0 to ZylinderCount-1
Zylinders.Add(New Zylinder("Zylinder." & i,100,45)
Next
 
Was dir eventuel helfen könnte wären Vektoren (oder halt ähnliche Listen Objekte), sofern ich richtig verstehe was du machen möchtest. Da könntest du dann dynamsiche soviele Objekte reinstecken wie du willst.

Ich hab aber keine Ahnung wie die entsprechende Klasse in VB heisst die das kann, ich weiss nur das es in Java und in C++ geht :D

//edit: ich seh grad dass das eh schon im Post über mir steht, also wirds vermutlich so gehen wie dort beschrieben
 
Zurück
Oben