Control Handle

  • VB.NET

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Control Handle

    Hey.
    Kurze Frage.
    Ich weiß nicht ob der Titel passend ist, aber ich will folgendes tun.

    Ich habe eine Function.
    Diese ist z.B.

    VB.NET-Quellcode

    1. Function Resize()
    2. .x = 22
    3. .y = 34
    4. End Function


    Das bringt aber nichts. Ich weiss das es geht, aber wie mach ich es, dass ich in dem Aufruf das Control mit übergeben kann?
    Also z.B. in dem Fall:

    VB.NET-Quellcode

    1. Resize(Button1)


    Nun soll dann halt X und Y in dem Beispiel von Button1 geändert werden.
    Doch wie mach ich das?
    Hoffe, man versteht die Frage :D
    Mfg. René
    Ok danke, das klappt :)
    Nun aber zu meinem richtigem Problem..

    Ich habe kein Button, sondern ein Image

    VB.NET-Quellcode

    1. Public Skin1 As Image


    Wenn ich das As Control durch As Image ersetze klappts nicht.
    Bei dem Image will ich dann X und Y ändern, nicht die größe.
    Wie mach ich das dann?

    Nochmal danke :)

    VB.NET-Quellcode

    1. ​Public Skin1 As Image = My.Resources.Test
    2. Public Player1 As New Rectangle(120, 120, 50, 70)
    3. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    4. With e.Graphics
    5. .DrawImage(Skin1, Player1)
    6. .SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    7. End With
    8. End Sub
    beim Image gib es .Width und .Height

    EDIT: Achso...
    bei DrawImage kannst du die größe des bildes angeben angeben:

    Quellcode

    1. e.Graphics.DrawImage(Bild,XPos,YPos,Breite,Höhe) ' EDIT: hat sich erledigt.....

    bzw. du musst Player1.width und player1.height ändern..

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RoulettePilot“ ()

    Artentus schrieb:

    weil das ist wie gesagt gar kein Control und besitzt auch X- und Y-Eigenschaft nicht.


    Doch Player1 hat X und Y, welches ich gerne ändern würde über

    Resize(Player1) in dem Fall.
    Nur um das zu machen, muss ich das hier wie ändern?

    VB.NET-Quellcode

    1. Function Resize(c As Control)
    2. c.Location = New Point(22, 34)
    3. End Function


    Das As Control muss ja nun was anderes sein.
    Image geht nicht, also was muss da hin? :)
    Ah ja, das ist jetzt aber was ganz anderes. Player1 ist ein System.Drawing.Rectangle und hat natürlich X und Y, nur hat das rein gar nichts mit der System.Drawing.Image-Klasse zu tun, von der du am Anfang gesprochen hast.
    Damit ist der Code natürlich ebenso einfach wie offensichtlich:

    VB.NET-Quellcode

    1. Function Resize(rect As Rectangle)
    2. rect.X = 22
    3. rect.Y = 34
    4. End Function

    TheGameSiders schrieb:


    Die Sub kann auch Move heissen, ist egal, hauptsache es würde sich was ändern wenn ich es aufrufe :)
    Resize ist nur ein Test.

    Vielleicht wäre es einfacher gleich zu sagen was du machen willst, anstatt ein Test.

    Aber ein Geheimtipp für dich:

    Du setzt zwar das Rec neu (egal ob die Position X,Y oder die Größe widht height)
    Aber..
    hast du deiner Form auch gesagt, das sich was geändert hat?, also das sie neu zeichnen soll?

    Also ein Holzhammermäßiges me.Refresh oder ein form1.invalidate sollte da wunder tun.
    jetzt mal butter bei de Fische.. zeig mal deinen jetzigen Code

    Edit:..
    Glaskugel....
    evtl hast du 2 recs? eines was du änderst, und eines mit dem du zeichnest? MÖÖÖGLICH ist ja alles...
    gehe doch einfach mal debugmäßig durch und schau dir die Werte an.

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

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Public Skin1 As Image = My.Resources.Girl1Up
    3. Public Player1 As New Rectangle(120, 120, 50, 70)
    4. Function Resize(rect As Rectangle)
    5. rect.X = 22
    6. rect.Y = 34
    7. Me.Invalidate()
    8. End Function
    9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    10. Resize(Player1)
    11. End Sub
    12. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    13. With e.Graphics
    14. .DrawImage(Skin1, Player1)
    15. .SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
    16. End With
    17. End Sub
    18. End Class
    Na Bitte.. GlasKugel hatte recht:
    einige "abers..."
    1. Du nutzt eine Funktion, die aber nichts zurückgibt.. (das nur nebenbei.. Sub ist besser)
    2. Du nutzt den Namen Resize = ungut, da dieser Name bereits verwendet wird
    3, ändere die Zeile 6-14 z.B. in

    VB.NET-Quellcode

    1. Private Sub ResizeBild()
    2. Player1.Width = 22
    3. Player1.Height = 34
    4. Me.Invalidate()
    5. End Sub
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. ResizeBild()
    8. End Sub


    oder füge das byREF hinzu wenn es so sein soll, wie du es geschrieben hast:

    VB.NET-Quellcode

    1. Function ResizeBild(ByRef rec As Rectangle)
    2. rec.Width = 22
    3. rec.Height = 34
    4. Me.Invalidate()
    5. End Function
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. ResizeBild(Player1)
    8. End Sub


    4. rein instinktiv würde ich .SmoothingMode noch VOR drawimage setzen.

    RoulettePilot schrieb:

    Du nutzt eine Funktion, die aber nichts zurückgibt.. (das nur nebenbei.. Sub ist besser)


    Das nicht nur nebenbei. Das ist der gröbste Fehler, den man sich leisten kann. Das so oft angeprangerte OPTION STRICT OFF.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o