Hallo,
ich versuche seit 2 Tagen verzweifelt zur Laufzeit dynamisch Objekte zu
erzeugen und diese zu bestimmen.
Konkret, ich klicke auf ein Panel, will eine PictureBox erstellen,
dieser PictureBox geb ich beim Start eigenschaften wie Location und
Image mit und würde diese PictureBox dann gerne also Member meiner
Klasse verändern, dh Location und Image. Ich will also bis zu 8 Objekte
haben mit dem Namen Fahrzeug, da ich weiß das es nicht mehr als 8
werden, habe ich ein Array daraus gemacht.
Allerdings zeigt es mir nach wie vor nicht mal eine PictureBox an.
1
Private Sub Form1_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick
pic(indexcount).Location = New Point(pic(indexcount).Location.X = Mouse_Postion1, pic(indexcount).Location.Y = Mouse_Postion2)
15
pic(indexcount).Visible = True
16
pic(indexcount).Image = My.Resources.loch
17
pic(indexcount).Height = 22
18
pic(indexcount).Width = 17
19
20
Me.Controls.Add(pic(indexcount))
21
Next indexcount
22
23
End Sub
So hätte ich es probiert, aber wie gesagt ohne Erfolg, ich hab schon so
viele Lösungen in Google ausprobiert und bin nicht vorwärts gekommen.
Ich lese immer in den OpenBooks von Galileo aber eine Lösung dafür
konnte ich nicht finden.
Hat vlt wer einen Link oder Lösungsvorschlag für mich? Ein Link mit
einer Erklärung wäre mir lieber, dann lern ich noch was daraus ;)
mfg
Markus B. schrieb:> einer Erklärung wäre mir lieber
Und mir wäre lieber wenn du wenigstens mal sagst was den nicht so
klappt wie gedacht? Compilefehler? Warnungen? Explodiert dein PC beim
starten des Progamms?
Möglicherweise mußt du einfach den Container neu zeichnen?
Und Debugausgabe sind häufig auch nicht soooo verkehrt... außerdem sieht
es so aus als ob du alle Boxen auf die gleiche Position setzt (wozu du
hier ein Array benötigst ist mir auch schleierhaft wenn du später nix
mher damit anstellst...).
Es passiert schlichtweg nichts, keine Debugangaben oder Compilerfehler,
es passiert einfach rein gar nix
Und nein ich will diese Boxen später bewegen, nur wär ich schon mal sehr
froh wenn ich überhaupt eine Box erstellen könnte
Und zur Position, eigentlich sollte es an die Position der Maus gesetzt
werden
Ich meinte damit das du Debugausgaben machen sollt um Festzustellen ob
überhaupt die Funktion aufgerufen wird, und in der Schleife eventuell
mal die Verwendeten Parameter ausgeben.
Markus B. schrieb:> Und zur Position, eigentlich sollte es an die Position der Maus gesetzt> werden
Alle 9 Boxen?
Mit dem Label hab ich mir jetzt eine Debuganzeige gebastelt, weil ich
mit Einzelschritten nicht weiter gekommen bin
Zuerst habe ich mir "OK" anzeigen lassen, ging einwandfrei, danach hab
ich mir "car_counter" anzeigen lassen, hat auch zuverlässig
funktioniert, nun wollte ich mir die Location anzeigen lassen, bei der
Abfrage auf X und Y kommt jeweils immer nur eine 0. liegts daran vlt?
Markus B. schrieb:> Abfrage auf X und Y kommt jeweils immer nur eine 0. liegts daran vlt?
Das mußt du doch entscheiden ob in deiner Logik das Auftreten von "0"
als Postion zu irgendwelchem Fehlverhalten führen könnte.
Läubi .. schrieb:> Das mußt du doch entscheiden ob in deiner Logik das Auftreten von "0"> als Postion zu irgendwelchem Fehlverhalten führen könnte.
Das versteh ich nicht ganz
Ich habe doch meine X und Y Position klar mit einen Punkt definiert?
X = 400 und Y = 15, unabhängig vom Rest? Oder seh ich das falsch?!
Hallo,
1. Wenn du die Location Eigenschaft verwendest ist die Top Angabe weiter
oben sinnlos, da sie von Location überschrieben wird.
2. Point wird wie folgt verwendet: Object.Location = New
Point(xcoordinate, ycoordinate)
Ohne ein = . Mit dem = verursachts du nur einen Boolschen Wert True
oder False.
3. Wie ist pic() definiert?
VBler schrieb:> Hallo,>> 1. Wenn du die Location Eigenschaft verwendest ist die Top Angabe weiter> oben sinnlos, da sie von Location überschrieben wird.>> 2. Point wird wie folgt verwendet: Object.Location = New> Point(xcoordinate, ycoordinate)> Ohne ein = . Mit dem = verursachts du nur einen Boolschen Wert True> oder False.>> 3. Wie ist pic() definiert?
Hallo,
ok das mit der Location teste ich
Aber der aktuelle Code ist der vom 10.12.
Da ist kein .Top mehr enthalten?!
Hallo Markus,
Entschuldige, hat sich auf den ersten Beitrag bezogen.
Hab's jetzt noch mal selbst getestet, der Code müsste ungefähr so
aussehen (so funktioniert's zumindest bei mir):
1
Public car_counter As Integer = 0
2
Public auto(8) As PictureBox
3
4
Private Sub ausfahrt_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ausfahrt.MouseDown
Es ist besser, Variablen außerhalb von Subs und Functions mit Public
oder Privat zu deklarieren.
Ich geh hier mal davon aus, dass 'ausfahrt' eine PictureBox ist.
1
auto(car_counter) = New PictureBox
2
auto(car_counter).Name = "auto_" & car_counter
3
auto(car_counter).Location = New Point(400 + car_counter * 10, 15)
In den Point-Konstrukor musst du die Werte wie oben reinschreiben. Bei
deiner Variante würde er für x und y 'False' übergeben.
Die letzte Zeile einfügen wenn du die Größe definieren willst.
1
ausfahrt.Controls.Add(auto(car_counter))
Wenn, wie oben angenommen 'ausfahrt' eine Picturebox ist, dann ME durch
ausfahrt ersetzen, um die neuen Pictureboxes innerhalb von ausfahrt
anzuzeigen.
1
Label1.Text = auto(car_counter).Location.X
2
3
End Sub
4
5
Private Sub ausfahrt_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ausfahrt.MouseUp
Bitte beachte, dass die Pictureboxes relativ weit rechts erscheinen
werden, da bei Location für x=400Pixel+ angegeben sind. Hoffe ich konnte
dir helfen.
Schönen Abend
Also "ausfahrt" ist ein Panel, aber sollte von der Funktion her egal
sein
Und die PictureBox soll innerhalb der Form erscheinen, also doch
"Me.Controls..."
Wenn ich nun aba eine Größe angebe, hebe ich dann nicht das AutoSize
auf?
Und die Position wurde händisch ausgetestet, passt also ;)
Abend,
Also wenn die Pictureboxes in der Form erscheinen sollen, stimmt
natürlich me.controls..
Eine Größenangabe hebt Autosize nicht auf, ganz im Gegenteil. Ist
eigentlich nur dazu gedacht, im vorraus der Picturebox eine definierte
Größe zu geben. Hast recht, ist in diesem Fall wohl eher unnötig.
Funktioniert der Code inzwischen schon?