Picturebox über Code erstellen

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von vb-owner.

    Picturebox über Code erstellen

    Ich bin gerade dabei ein kleines Spiel (Vogelperspektive) zu programmieren.
    Eine Spielfigur, die sich in der Karte bewegen kann hab ich schon (mit e.Keycode).
    Jetz soll meine Figur nur noch schießen können. Ich habe mir gedacht, dass ich mit jedem klick
    auf die Schusstaste (bei mir Leertaste) eine Picturebox erstellt wird, die dann nach oben "fliegt",
    bis sie einen Gegner trifft (oder auch nicht).
    Das mit dem treffen mach ich mit IntersectsWith.
    Nun möchte ich wissen, wie man das mit dem Pictureboxen per Code erstellen macht.

    Danke im vorraus, Nils
    Nun, eine Instanz der PictureBox anlegen und die Properties entsprechend ändern. Dann noch in den Container mit Controls.Add() einfügen und fertig. Die PictureBox noch irgendwie abspeichern, sodass man sie in der Position verändern kann.

    Viele Grüße, Phil.
    zum beispiel

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    2. Dim pb As New PictureBox
    3. With pb
    4. .Image = My.Resources.Resource1.jesusberg
    5. .Location = New Point(12, 12)
    6. .Size = New Size(100, 100)
    7. End With
    8. AddHandler pb.Click, AddressOf pb_click
    9. Me.Controls.Add(pb)
    10. End Sub
    11. Private Sub pb_click(ByVal sender As Object, ByVal e As EventArgs)
    12. End Sub


    oder entsprechend, wenn's ein array sein soll

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    2. Dim pb(10) As PictureBox
    3. For i = 0 To 10
    4. pb(i) = New PictureBox
    5. With pb(i)
    6. .Image = My.Resources.Resource1.jesusberg
    7. .Location = New Point(12, 12)
    8. .Size = New Size(100, 100)
    9. End With
    10. AddHandler pb(i).Click, AddressOf pb_click
    11. Me.Controls.Add(pb(i))
    12. Next
    13. End Sub
    14. Private Sub pb_click(ByVal sender As Object, ByVal e As EventArgs)
    15. End Sub
    Danke für deine Antwort. Das hilft mir schon viel weiter.
    Aber bei mir zeigt er immer einen Fehler bei
    My.Resources.Resource1.jesusberg an.
    Ich habe auch schon eine Resource namens "jesusberg" erstellt, aber das funktioniert auch nicht.

    VB2008Beginner schrieb:

    Danke für deine Antwort. Das hilft mir schon viel weiter.
    Aber bei mir zeigt er immer einen Fehler bei
    My.Resources.Resource1.jesusberg an.
    Ich habe auch schon eine Resource namens "jesusberg" erstellt, aber das funktioniert auch nicht.
    XD

    das is'n bild, das ich bei mir in den resourcen gespeichert hab. dient nur zur veranschaulichung. soll zeigen, dass du da halt ein bild einfügen kannst/sollst.

    alternativ könntest du auch

    VB.NET-Quellcode

    1. pb.Image = Image.FromFile("bild.jpg")
    nehmen, wobei ich persönlich es nicht sonderlich mag alle dazugehörigen dateien gesondert mitzuführen.
    da baust dir 'n timer rein und startest den nachdem du die pictureboxen initialisiert hast. da is dann ein kleiner fehler in meinem code, die deklaration der pictureboxen muss global sein, weil du sonst nicht auf sie mit dem timer zugreifen kannst.

    dann machst du noch sowas in der art in das timer1_tick-event

    VB.NET-Quellcode

    1. pb(0).Location = New Point(Me.Location.X, Me.Location.Y - 1)


    und schon wird die picturebox mit index 0 jeden tick (alle 100ms) um ein pixel nach oben verschoben.

    einfügen tust du die pb über

    VB.NET-Quellcode

    1. Me.Controls.Add(pb(0))

    baust du dann in 'ne schleife mit einer verzögerung und hast das auch soweit.
    Hier hab ich alles gepostet was du brauchst..
    halt, anstatt button picturebox.. ;)

    VB.NET-Quellcode

    1. Public Shared Function Picbox(ByVal positionx As Integer, ByVal positiony As Integer, ByVal Bild As Image, ByVal Größe_width As Integer, ByVal Größe_height As Integer)
    2. Dim p As New PictureBox
    3. Form1.Controls.Add(p)
    4. p.Location = New Point(positionx, positiony)
    5. p.Image = Bild
    6. p.Size = New Size(Größe_width, Größe_height)
    7. End Function
    8. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. 'Die 1. 100 ist X und die 2. Y
    10. 'My.Resources.bla ist nun das Bild
    11. 'Die 1. 10 ist nun width von der Picturebox
    12. 'Die 2. 10 ist nun height von der Picturebox
    13. Picbox(100, 200, My.Resources.asd, 10, 10)
    14. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Scream“ ()

    is ja nich böse gemeint, aber...

    "kommt eine Fehlermeldung" oder "funktioniert nicht" und der ganze kram hängt einem irgendwann zum hals raus... :thumbdown:

    soviele informationen wie möglich mitgeben, damit euch geholfen werden kann.

    wenn solche allgemeinen formulierungen kommen, weiß keiner was sache ist. oder bei so sachen "ich hab diesen code verwendet ... aber irgendwas funktioniert nicht", da werden sich die wenigsten die mühe machen den kompletten code durchzugehen...
    Ok, da kommen gleich 4 Fehlermeldungen auf einmal für diese eine Sache:

    1. Für den Parameter "Bild" von "Public Shared Function Picbox (position x As Integer, position y As Integer, Bild As System.Drawing.Image, Größe_width As Integer, Größe_height As Integer) As Object" wurde kein Argument angegeben.

    2.Für den Parameter "Größe_height" von "Public Shared Function Picbox (position x As Integer, position y As Integer, Bild As System.Drawing.Image, Größe_width As Integer, Größe_height As Integer) As Object" wurde kein Argument angegeben.

    3.Für den Parameter "Größe_width" von "Public Shared Function Picbox (position x As Integer, position y As Integer, Bild As System.Drawing.Image, Größe_width As Integer, Größe_height As Integer) As Object" wurde kein Argument angegeben.

    4.Für den Parameter "position y" von "Public Shared Function Picbox (position x As Integer, position y As Integer, Bild As System.Drawing.Image, Größe_width As Integer, Größe_height As Integer) As Object" wurde kein Argument angegeben.