Ergebnis 1 bis 3 von 3
  1. #1
    Trojaner
    Registriert seit
    29.01.2008
    Beiträge
    53

    Standard [C#]Form bewegen

    Ich habe einen Code geschrieben mit dem ermöglich werden soll, dass mit festgehaltener linken Maustaste die Form verschoben werden soll.
    Mein Porblem:
    Wenn ich die Form anlicke und versuche zu verschieben "flackert" bzw. beginnt zu springen.

    Habt ihr vllt eine Lösung?

    Hier mein Code:
    PHP-Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 
    WindowsFormsApplication1
    {
        public 
    partial class Form1 Form
        
    {
            
    bool _MouseDown;
            
    Point ptMousepos;
            public 
    Form1()
            {
                
    InitializeComponent();
                
    this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form_MouseDown);
                
    this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form_MouseUp);
                
    this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form_MouseMove);
                
    System.Windows.Forms.Label label1 = new System.Windows.Forms.Label();
                
    this.Controls.Add(label1);
            }
            public 
    void Form_MouseDown(object senderMouseEventArgs e)
            {
                if (
    e.Button == MouseButtons.Left)
                {
                    
    ptMousepos e.Location;
                    
    _MouseDown true;
                }
            }
            public 
    void Form_MouseUp(object senderMouseEventArgs e)
            {
                if (
    e.Button == MouseButtons.Left)
                {
                    
    _MouseDown false;
                }
            }
            public 
    void Form_MouseMove(object senderMouseEventArgs e)
            {
                if (
    _MouseDown)
                {

                    
    this.Left += e.ptMousepos.X;
                    
    this.Top += e.ptMousepos.Y;
                    
    ptMousepos e.Location;

                }
            }
        }


  2. #2

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Bei diesem Code ist es kein Wunder, dass es flackert, da die Form ständig bei jeder kleinsten Mausbewegung komplett neu gezeichnet wird.

    Du hast nun 2 Möglichkeiten:
    Lege den Code aus dem MouseMove-Ereignis ins MouseUp-Ereignis, so dass nur einmal gezeichnet wird oder mach' es gleich richtig mit den nötigen APIs:

    Code:
    public const int WM_NCLBUTTONDOWN = 0xA1;
    public const int HT_CAPTION = 0x2;
    
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    public static extern bool ReleaseCapture();
    
    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
         if (e.Button == MouseButtons.Left)
         {
           ReleaseCapture();
           SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
         }
    }

  3. #3
    Cool Story, Bro.
    Registriert seit
    04.04.2010
    Beiträge
    150

    Standard

    Das DoubleBuffered Property des Forms sollte notfalls auch das Flackern vermindern.

Ähnliche Themen

  1. [VB .NET] mauszeiger Bewegen
    Von snowbase im Forum .NET Sprachen - Techniken
    Antworten: 2
    Letzter Beitrag: 14.09.2009, 21:08
  2. Opfer dazu bewegen ins routermenü zu gehen
    Von ichbinslol im Forum Wireless-Lan
    Antworten: 4
    Letzter Beitrag: 02.04.2009, 19:33
  3. [VB.Net] Fenster bewegen mit festhalten
    Von Montaxx im Forum .NET Tutorials
    Antworten: 1
    Letzter Beitrag: 02.04.2009, 19:07
  4. [VB] Mauszeiger auf bestimmte Farbe bewegen
    Von Breakdown im Forum VisualBasic
    Antworten: 9
    Letzter Beitrag: 26.09.2008, 17:56
  5. Antworten: 0
    Letzter Beitrag: 01.10.2007, 13:40

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •