Control aus der Form hinausziehen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Control aus der Form hinausziehen

    Hallo,
    ich habe auf meiner form einem Picturebox mit einem Maus Icon. ;) Num möchte ich das ich die Picturebox bei gedrückter Maustaste aus der Form gerausgezogen werden kann und dabei zb die Mauskoordinaten an die Form sendet. Natürlich nur solange die Maustaste gedrückt ist. Beim Loslassen soll Die Picturebox wieder an ihrem Platz sein und ich die Mauskoordinaten haben wo ich die Maustaste losgelassen habe.

    Fals ich es schlecht beschrieben habe kenn man diese Funktion auch von diversen Coloer Pickers. Wo man die Pipette auf eine Farbe ziehen kann.

    Hoffe es kann mir jemand einen Ansatz liefern.

    Danke T
    Mit SendMessage und ReleaseCature ganz einfach.

    VB.NET-Quellcode

    1. <DllImport("user32.dll")>
    2. Private Shared Function ReleaseCapture() As Integer
    3. End Function
    4. <DllImport("user32.dll", CharSet:=CharSet.Auto)>
    5. Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
    6. End Function
    7. Const WM_NCLBUTTONDOWN = &HA1
    8. Const HTCAPTION = &H2


    Im Mouse_Move der PictureBox denn

    VB.NET-Quellcode

    1. If e.Button = Windows.Forms.MouseButtons.Left Then
    2. ReleaseCapture()
    3. SendMessage(PictureBox1.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0)
    4. End If


    Oder beim Mousedown auf die PictureBox die Koordinaten wo gecklickt wurde in einer Variablen sichern, beim MouseMove der PictureBox(Bedingt mit MouseLeftButtonDown) die neue Position errechnen und setzen.

    Controls: Verschieben mittels Drag & Drop und das Click Problem
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    Das Problem ist hier, das eine PictureBox kein Top-Level-Window ist. Wüsste aber ein Workaround, die Picturebox auf dem Form ausblenden ein weiteres Form anzeigen auf der eine 2. Picturebox ist, da die auf einen TopLevelWindow liegt geht das auch asserhalb des 1. Forms, wobei wenn du das mit sendmessage machst, musst du anstatt des PictureBox-Handles das der 2. Form nehmen. Wobei das 2. Form nicht ein MDI-Child des 1.Forms sein darf.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    Warum änderst du beim Mouse Down Event nicht einfach den aktuellen Cursor und stellst beim Mouse Up den ursprünglichen Maus -Cursor wieder her. Ebenso fragst du die Koordinaten des Cursors ab und fertig.

    Spoiler anzeigen

    C#-Quellcode

    1. private void MouseDown(object sender, MouseEventArgs e)
    2. {
    3. Cursor = Cursors.Cross;
    4. }
    5. private void MouseUp(object sender, MouseEventArgs e)
    6. {
    7. Cursor = Cursors.Default;
    8. MessageBox.Show(Cursor.Position.ToString());
    9. }

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

    @Toolmaster Mach Dir Dein eigenes Datenformat und arbeite dann mit Drag n Drop.
    Die Funktion, wo es losgeht, wäre DoDragDrop(). msdn.microsoft.com/de-de/libra…dodragdrop(v=vs.110).aspx
    Wenn der Empfänger ebenfalls von Dir geschrieben wird, ist das Format absolut kein Problem, da kannst Du ne kleine Klasse für schreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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