Avatar billede kvi Nybegynder
17. januar 2006 - 12:26 Der er 4 kommentarer

Oprette, flytte og slette firkanter vha musen

Jeg vil gerne kunne lave en firkant hver gang jeg trykker på min form, med mindre der er en firkant i forvejen.
Er der en firkant vil jeg have mulighed for at flytten den eller slette den.
Firkanterne gemmes i en ArrayListe;
Avatar billede bitsch Nybegynder
17. januar 2006 - 18:51 #1
Rigtigt sjovt område at leje med, men som du nok ved allerede er det ikke noget man klarer med to linier kode.

Her er en link til en rigtig god artikel som kan hjælpe dig i gang.
http://www.codeproject.com/cs/miscctrl/NetronLight.asp

Eksemplet er jo nok lidt mere avanceret end det som du ønsker, men for at kunne flytte "shapes" må du gennem de samme steps.
Avatar billede kvi Nybegynder
18. januar 2006 - 14:00 #2
Hej
Jeg har løst problemt, tak for hjælpen alligevel.

Ps. er du interesseret kan jeg sende koden.

Klaus
Avatar billede Syska Mester
18. januar 2006 - 14:19 #3
bare smid koden, er da altid rart at se

// ouT
Avatar billede kvi Nybegynder
18. januar 2006 - 14:21 #4
Hej
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace Rec2
{
    public partial class Form1 : Form
    {     
        private ArrayList myRec;       
        private Rectangle temp;
        public Form1()
        {
            myRec = new ArrayList();
            temp = new Rectangle(0, 0, 0, 0);           
            this.Cursor = Cursors.Default;
            InitializeComponent();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {           
            switch(e.Button)
            {
                case MouseButtons.Left:
                    add(new Point(e.X,e.Y));
                break;
                case MouseButtons.Right:
                remove(new Point(e.X, e.Y));
                break;
            }           
            Invalidate();
        }//End Form1_MouseDown()

        private void remove(Point p)
        {
            for (int i = 0; i < myRec.Count; i++)
            {
                temp = (Rectangle)myRec[i];
                if (temp.Contains(p))
                {
                    myRec.Remove(temp);
                }
            }
        }//End remove()

        private void add(Point p)
        {
            if (myRec.Count == 0)
            {
                Rectangle rectangle = new Rectangle(p.X-20, p.Y-20, 40, 40);
                myRec.Add(rectangle);
             
            }
            if (myRec.Count > 0 && this.Cursor != Cursors.Hand)
            {               
                for (int i = 0; i < myRec.Count; i++)
                {
                    temp = (Rectangle)myRec[i];
                    if (!temp.Contains(p))
                    {
                        Rectangle rectangle = new Rectangle(p.X-20, p.Y-20, 40, 40);
                        myRec.Add(rectangle);
                        break;
                    }
                }
            }
        }//End add()     

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            int x=e.X;
            int y=e.Y;
            label1.Text = "X: " + e.X + "  Y: " + e.Y + "  Antal rec er: " + myRec.Count;

            foreach (Rectangle r in myRec)
            {
                if (r.Contains(new Point(e.X, e.Y)))
                {
                    this.Cursor = Cursors.Hand;
                    break;
                }
                else
                    this.Cursor = Cursors.Default;
            }           
            //if (Capture && e.Button == MouseButtons.Left)
            if (Capture && this.Cursor==Cursors.Hand)
            {
                for (int i = 0; i < myRec.Count; i++)
                {
                    temp = (Rectangle)myRec[i];
                    if (temp.Contains(x, y))
                    {                     
                        temp.X = x-20;
                        temp.Y = y-20;                     
                        myRec[i] = temp;
                        Invalidate();
                        break;
                    }                   
                }
            }//End if         
        }//End Form1_MouseMove()
       

        private void Form1_Paint(object sender, PaintEventArgs e)
        {       
            Graphics g= e.Graphics;                 
            Pen bluePen = new Pen( Color.Blue, 1 );
            int count=0;
            foreach(Rectangle r in myRec)
            {
                g.DrawRectangle( bluePen,r);
                g.DrawString(count.ToString(), new Font("Times New Roman", 8),
                    new SolidBrush(Color.Black), r.X, r.Y);
                count++;
            }           
        }//End pictureBox1_Paint()       
    }//End class
}//End namespace

Klaus
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