Avatar billede skov_p Praktikant
14. januar 2008 - 09:50 Der er 1 løsning

Visning af usercontrol mens den Location ændres

Jeg er ved at lave en application hvor jeg med museb kan trække runde med en usercontrol runtime.
Jeg ændre location i forhold til musens retning men min user control står og skifter mellem to locations.
Den flytter sig men ikke som den skal.
Jeg har prøvet DoubleBuffering men uden held.

Her er koden til min usercontrol

public TextLabel() {
            InitializeComponent();
            MinimumSize = new Size( 5, 5 );
        }
        /// <summary>
        /// The number of pixels that the cursor can be within the area when displaying the correct cursor
        /// </summary>
        private const int GreyZone = 5;
        private int MoveOffsetH = 0;
        private int MoveOffsetW = 0;
        private Point OrgLocation;
        private bool ResizeH, ResizeW;
        private bool _selected;

        public bool Selected {
            get { return _selected; }
            set {
                _selected = value;
                if( value ) DrawDashedBorder();
                else Invalidate();
            }
        }

        protected override void OnMouseDown(MouseEventArgs e) {
            if( e.Button.Equals( MouseButtons.Left ) ) {
                ResizeW = e.X > Width - GreyZone;
                ResizeH = e.Y > Height - GreyZone;
                if( !ResizeH && !ResizeW ) {
                    OrgLocation = Location;
                    MoveOffsetH = e.Y;
                    MoveOffsetW = e.X;
                    Cursor = Cursors.NoMove2D;
                }
            }
            base.OnMouseDown( e );
        }

        protected override void OnMouseUp(MouseEventArgs e) {
            MoveOffsetH = 0;
            MoveOffsetW = 0;
            ResizeW = false;
            ResizeH = false;
            base.OnMouseUp( e );
        }

        /// <summary>
        /// Sets the right cursors for resizing
        /// Location is ref to the user control not the parent form.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnMouseMove(MouseEventArgs e) {
            //Sets the cursor
            if( e.X > Width - GreyZone && e.Y > Height - GreyZone )
                Cursor.Current = Cursors.SizeNWSE;
            else
                if( e.Y > Height - GreyZone ) Cursor.Current = Cursors.SizeNS;
                else
                    if( e.X > Width - GreyZone ) Cursor.Current = Cursors.SizeWE;
                    else Cursor.Current = Cursors.Default;

            //Move the control
            if( !ResizeW && !ResizeH && e.Button.Equals( MouseButtons.Left ) ) {
                Cursor = Cursors.NoMove2D;
                Console.WriteLine("Old: "+ Location.ToString() );
                Point newLocation = new Point( Location.X + (e.X - MoveOffsetW), Location.Y + (e.Y - MoveOffsetH) );
                Location = newLocation;
                MoveOffsetH = e.Y;
                MoveOffsetW = e.X;
                Console.WriteLine("New: "+ Location.ToString() );
            }
           
            //Sets the new size
            if( ResizeW ) Width = e.X - MoveOffsetW;
            if( ResizeH ) Height = e.Y - MoveOffsetH;
            if(e.Button.Equals(MouseButtons.Left))
                Invalidate();
        }

        protected override void OnClick(EventArgs e) {
            Selected = true;
            base.OnClick( e );
        }

        protected override void OnLostFocus(EventArgs e) {
            Selected = false;
            base.OnLostFocus( e );
        }

        protected override void OnPaint(PaintEventArgs e) {           
            base.OnPaint( e );
            if( Selected ) DrawDashedBorder();
        }

        private void DrawDashedBorder() {
            Graphics g = this.CreateGraphics();
            Pen p = (Pen)Pens.Blue.Clone();
            p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            p.Width = 5;
            g.DrawRectangle( p, 0, 0, Width, Height );
        }
Avatar billede skov_p Praktikant
14. januar 2008 - 23:11 #1
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester