Übergeordneter Container und Maus Position

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von samuel.

    Übergeordneter Container und Maus Position

    Hallo,
    ich versuche momentan ein Steuerelement zu schreiben. Es handelt sich um eien Art Progressbar. Nun ist es so, dass ich das mit einer Picturebox (name = bar realisiere.
    Wenn ich auf die Picturebox klicke, soll die Picturebox an diese Stelle springen bzw. ihre Breite auf diesen Punkt erweitern/kürzen.

    Bisher habe ich das immer so gemacht:

    VB.NET-Quellcode

    1. PictureBox1.Width = Cursor.Position.X - Me.Location.X - PictureBox1.Location.X


    Beim Steuerelemet hab ich mir das so vorgestellt:

    VB.NET-Quellcode

    1. bar.Width = (Cursor.Position.X - Me.ParentForm.Location.X - x - bar.Location.X)

    x steht für die Position meines Steuerelemts im Übergeordneten Container.
    Jedoch funktioniert das mit Me.Location nicht. Er gibt mir nur eine 0 aus.

    Hat jemand eine Lösung?

    MfG
    Samuel

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „samuel“ ()

    Also eine Progressbar mit Read/Write-Funktionalität.

    Also eiglich eine Trackbar.

    verwende Control.PointToScreen / .ScreenToPoint, um Bildschirm-/Control-bezogene Koordinaten umzurechnen.

    Auch wäre besser, wenn dus mit OwnerDrawing löst, weil performanter und ein Control weniger erforderlich.

    Dazu einfach im Paint-Event mit e.Graphics.FillRectAngle den Scrollbalken zeichnen.


    so entfiele auch das Umrechnen von koordinaten, und das behandeln der Events mehrerer controls.
    Vielen, vielen Dank für den Ansatz.



    Habs jetzt so gelöst:

    VB.NET-Quellcode

    1. Me.PointToClient(Cursor.Position)



    Noch nen Problem.

    Ich zeichne jetzt so:

    VB.NET-Quellcode

    1. Dim bar As New TextureBrush(New Bitmap("C:\bild.png"), Drawing2D.WrapMode.Tile) e.Graphics.FillRectangle(bar, 0, 0, 100, 20)


    Wie kann ich den TextureBrush stretchen?

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

    mit TextureBrushes kenn ich mich nicht aus, ich glaub, für verschiedene Abmaße musste jedesmal einen neuen erstellen.
    TextureBrush malt ja einfach das Bild, und wenns kleiner ist als die zu bemalende Fläche, dann wiederholt er das Bild immer wieder - so geht "Textur" eben.

    Es wird aber pervers, in jedem paint eine neue Bitmap zu laden.

    Lade die Bitmap nur ein einziges Mal, eventuell sogar ein eine Shared Variable, dann wird sie auch dann nur einmal geladen, wenn du mehrere Progressbars verwendest.

    Statt TextureBrush kannst du auch mit e.Graphics.DrawImage die Bitmap direkt in die PB malen - es gibt eine Überladung, der du die Abmaße mitgeben kannst, sodaß das Bild ggfs. gestaucht wird.

    Das mit der Shared geht natürlich nicht, wenn du eine Image-Property anbieten willst, der im Designer ein Bild zuordnebar ist.

    Es wird also kompliziert, und du kannst überlegen, wenn du mega-schicke PBs haben willst, ob du nicht bei CodeProject abkupfern willst.

    ErfinderDesRades schrieb:

    Lade die Bitmap nur ein einziges Mal, eventuell sogar ein eine Shared Variable, dann wird sie auch dann nur einmal geladen, wenn du mehrere Progressbars verwendest.


    Mach ich bereits, habs nur hier im Code anderst eingefügt.
    Jedoch hab ich halt das Problem, dass ich den Brush stretchen muss, damit das Control für verschiedene Größen kompatibel ist.


    PS: Hab nur ich das Problem oder formatiert die Boardsoftware die Beiträge scheiße.
    Jedesmal wenn ich ein Beitrag erstelle, fügt er leere Zeilen zwischen die geschrieben Zeilen.
    Statt TextureBrush kannst du auch mit e.Graphics.DrawImage die Bitmap direkt in die PB malen - es gibt eine Überladung, der du die Abmaße mitgeben kannst, sodaß das Bild ggfs. gestretcht wird.

    PS: Hab nur ich das Problem oder formatiert die Boardsoftware die Beiträge scheiße.
    vlt hilft auch da: VB-Tag richtig benutzen
    Danke werde ich versuchen.

    Mal ne dumme Frage, wie kann ich das PaintEvent des Controls aufrufen z.B. über einen Button?

    EDIT:
    Mit dem Stretchen lass ich jetzt mal, ist wohl etwas komplizierter.
    Kann dann halt mommentan nur eine vertikale größe nehemen.


    Vielen dank für deine Hilfe ErfinderDesRades.

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