Avatar billede dr_chaos Nybegynder
02. november 2004 - 11:19 Der er 5 kommentarer og
1 løsning

Mousemove med rectangle på en picturebox

Vi har et problem med et c# program i forbindelse med et projektarbejde.
Programmet kan tegne en rectangle på en picture box.
Men vi kan ikke finde ud af at få flyttet det enkelte rectangle med mousemove.
Spørgsmålet går på hvordan kan vi få implementeret det.
Vi har prøvet med mange forskellige ting men intet af det er lykkedes. Derfor er der mange points til den som hjælper os med at få det implementeret.






Kildekode:

using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using System.Drawing.Printing;

class DrawFigure: Form
        //class StandardMenu: Form
    {
        ArrayList al = new ArrayList();
       
        const int iNumberOfPages = 2;
        int iPageNumber, iPagesToPrint;
        MenuItem miFileNew, miFileOpen, miFileClose, miFileSave, miFileSaveAs, miFilePageSetup ,miFilePrint;
        MenuItem miEditUndo, miEditRedo, miEditCut, miEditCopy, miEditPaste;

        bool bDocumentPresent = true;
        bool bNonNullSelection = true;
        bool bStuffInClipBoard = false;
        bool i = false;
        bool y = false;

        protected string strProgName;
        protected string strFileName;
        protected Image  image;

        ToolTip tp = new ToolTip();
        ToolBarButton tbbNew, tbbOpen, tbbSave, tbbPrint, tbbCut, tbbCopy, tbbPaste, tbbUndo, tbbRedo;

        Point pt;
        Point ptMouse = Point.Empty;

        private System.Windows.Forms.PictureBox pictureBox1;
   
        public static void Main()
        {
            Application.Run(new DrawFigure());
        }

        public DrawFigure()
        {
            Text = "UML Design Tool";
                   
            //Button Rectangle
            Button btn = new Button();
            tp.SetToolTip(btn, "Indsæt et rektangel");       
            btn.Parent = this;
            btn.Text = "Rectangle";
            btn.Location = new Point(10, 60);
            btn.Click += new EventHandler(ButtonClick);
                               
            //Button Ellipse
            Button btn1 = new Button();
            tp.SetToolTip(btn1, "Indsæt en ellipse");
            btn1.Parent = this;
            btn1.Text = "Ellipse";
            btn1.Location = new Point(10, 100);
            btn1.Click += new EventHandler(ButtonClick1);
       
            Menu = new MainMenu();
       
            // File
            MenuItem mi = new MenuItem("&File");
            mi.Popup += new EventHandler(MenuFileOnPopup);
            Menu.MenuItems.Add(mi);
            int index = Menu.MenuItems.Count - 1;
       
            //File New
            miFileNew = new MenuItem("&New");
            miFileNew.Click += new EventHandler(MenuFileNewOnClick);
            miFileNew.Shortcut = Shortcut.CtrlN;
            Menu.MenuItems[index].MenuItems.Add(miFileNew);
       
            //File Open
            miFileOpen = new MenuItem("&Open");
            miFileOpen.Click += new EventHandler(MenuFileOpenOnClick);
            miFileOpen.Shortcut = Shortcut.CtrlO;
            Menu.MenuItems[index].MenuItems.Add(miFileOpen);

            //File Close
            miFileClose = new MenuItem("Close");
            miFileClose.Click += new EventHandler(MenuFileCloseOnClick);
            Menu.MenuItems[index].MenuItems.Add(miFileClose);

            //Linie
            mi = new MenuItem("-");
            Menu.MenuItems[index].MenuItems.Add(mi);
       
            //File Save
            miFileSave = new MenuItem("&Save");
            miFileSave.Click += new EventHandler(MenuFileSaveOnClick);
            miFileSave.Shortcut = Shortcut.CtrlS;
            Menu.MenuItems[index].MenuItems.Add(miFileSave);
       
            //File Save As
            miFileSaveAs = new MenuItem("&Save As");
            miFileSaveAs.Click += new EventHandler(MenuFileSaveOnClick);
            Menu.MenuItems[index].MenuItems.Add(miFileSaveAs);

            //Linie
            mi = new MenuItem("-");
            Menu.MenuItems[index].MenuItems.Add(mi);

            //File Page Setup
            miFilePageSetup = new MenuItem("&Page Setup");
            miFilePageSetup.Click += new EventHandler(MenuFilePageSetupOnClick);
            Menu.MenuItems[index].MenuItems.Add(miFilePageSetup);

            //File Print
            miFilePrint = new MenuItem("&Print");
            miFilePrint.Click += new EventHandler(MenuFilePrintOnClick);
            miFilePrint.Shortcut = Shortcut.CtrlP;
            Menu.MenuItems[index].MenuItems.Add(miFilePrint);
       
            //Linie
            mi = new MenuItem("-");
            Menu.MenuItems[index].MenuItems.Add(mi);
       
            //File Exit
            mi = new MenuItem("E&xit");
            mi.Click += new EventHandler(MenuFileExitOnClick);
            Menu.MenuItems[index].MenuItems.Add(mi);
       
            //Edit
            mi = new MenuItem("&Edit");
            mi.Popup += new EventHandler(MenuEditOnPopup);
            Menu.MenuItems.Add(mi);
            index = Menu.MenuItems.Count - 1;

            //Edit Undo
            miEditUndo = new MenuItem("&Undo");
            miEditUndo.Click += new EventHandler(MenuEditUndoOnClick);
            miEditUndo.Shortcut = Shortcut.CtrlZ;
            Menu.MenuItems[index].MenuItems.Add(miEditUndo);

            //Edit Redo
            miEditRedo = new MenuItem("&Redo");
            miEditRedo.Click += new EventHandler(MenuEditRedoOnClick);
            Menu.MenuItems[index].MenuItems.Add(miEditRedo);

            //Linie
            mi = new MenuItem("-");
            Menu.MenuItems[index].MenuItems.Add(mi);
       
            //Edit Cut
            miEditCut = new MenuItem("Cu&t");
            miEditCut.Click += new EventHandler(MenuEditCutOnClick);
            miEditCut.Shortcut = Shortcut.CtrlX;
            Menu.MenuItems[index].MenuItems.Add(miEditCut);
       
            //Edit Copy
            miEditCopy = new MenuItem("&Copy");
            miEditCopy.Click += new EventHandler(MenuEditCopyOnClick);
            miEditCopy.Shortcut = Shortcut.CtrlC;
            Menu.MenuItems[index].MenuItems.Add(miEditCopy);
       
            //Edit Paste
            miEditPaste = new MenuItem("&Paste");
            miEditPaste.Click += new EventHandler(MenuEditPasteOnClick);
            miEditPaste.Shortcut = Shortcut.CtrlV;
            Menu.MenuItems[index].MenuItems.Add(miEditPaste);
       
            //Help
            mi = new MenuItem("&Help");
            Menu.MenuItems.Add(mi);
            index = Menu.MenuItems.Count - 1;
       
            //Help About
            mi = new MenuItem("About UML Design Tool");
            mi.Click += new EventHandler(MenuHelpAboutOnClick);
            Menu.MenuItems[index].MenuItems.Add(mi);

            //Context menu (højreklik menu)
            ContextMenu cm = new ContextMenu();
            EventHandler eh = new EventHandler(MenuOnClick);

            cm.MenuItems.Add("New class", new EventHandler(ButtonClick));
            cm.MenuItems.Add("-", eh);
            cm.MenuItems.Add("Open", new EventHandler(MenuFileOpenOnClick));
            cm.MenuItems.Add("Close", new EventHandler(MenuFileCloseOnClick));
            cm.MenuItems.Add("-", eh);
            cm.MenuItems.Add("Cut", new EventHandler(MenuEditCutOnClick));
            cm.MenuItems.Add("Copy", new EventHandler(MenuEditCopyOnClick));
            cm.MenuItems.Add("Paste", new EventHandler(MenuEditPasteOnClick));
       
            ContextMenu = cm;
       
            Text = strProgName = "Open feltet";

            //Create ImageList
            Bitmap bm = new Bitmap(GetType(),
                "WindowsApplication14.StandardButtons.bmp");

            ImageList imglst = new ImageList();
            imglst.Images.AddStrip(bm);
            imglst.TransparentColor = Color.Cyan;
       
            //Create Toolbar
            ToolBar tb = new ToolBar();
            tb.Parent = this;
            tb.ImageList = imglst;
            tb.ShowToolTips = true;
            tb.ButtonClick += new ToolBarButtonClickEventHandler(ToolBarOnClick);
       
            // Create toolbar Button New
            tbbNew = new ToolBarButton();
            tbbNew.ImageIndex = 0;
            tbbNew.ToolTipText = "New";
            tbbNew.Tag = miFileNew;
            tb.Buttons.Add(tbbNew);
       
            // Create toolbar Button Open
            tbbOpen = new ToolBarButton();
            tbbOpen.ImageIndex = 1;
            tbbOpen.ToolTipText = "Open File";
            tbbOpen.Tag = miFileOpen;
            tb.Buttons.Add(tbbOpen);
       
            // Create toolbar Button Save
            tbbSave = new ToolBarButton();
            tbbSave.ImageIndex = 2;
            tbbSave.ToolTipText = "Save File";
            tbbSave.Tag = miFileSave;
            tb.Buttons.Add(tbbSave);

            // Create toolbar Button Print
            tbbPrint = new ToolBarButton();
            tbbPrint.ImageIndex = 3;
            tbbPrint.ToolTipText = "Print File";
            tbbPrint.Tag = miFilePrint;
            tb.Buttons.Add(tbbPrint);
       
            // Create toolbar Button Cut
            tbbCut = new ToolBarButton();
            tbbCut.ImageIndex = 4;
            tbbCut.ToolTipText = "Cut";
            tbbCut.Tag = miEditCut;
            tb.Buttons.Add(tbbCut);
       
            // Create toolbar Button Copy
            tbbCopy = new ToolBarButton();
            tbbCopy.ImageIndex = 5;
            tbbCopy.ToolTipText = "Copy";
            tbbCopy.Tag = miEditCopy;
            tb.Buttons.Add(tbbCopy);
       
            // Create toolbar Button Paste
            tbbPaste = new ToolBarButton();
            tbbPaste.ImageIndex = 6;
            tbbPaste.ToolTipText = "Paste";
            tbbPaste.Tag = miEditPaste;
            tb.Buttons.Add(tbbPaste);

            //Create toolbar Button Undo
            tbbUndo = new ToolBarButton();
            tbbUndo.ImageIndex = 7;
            tbbUndo.ToolTipText = "Undo";
            tbbUndo.Tag = miEditUndo;
            tb.Buttons.Add(tbbUndo);

            //Create toolbar Button Redo
            tbbRedo = new ToolBarButton();
            tbbRedo.ImageIndex = 8;
            tbbRedo.ToolTipText = "Redo";
            tbbRedo.Tag = miEditRedo;
            tb.Buttons.Add(tbbRedo);

            //Picturebox
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.pictureBox1.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
            this.pictureBox1.Location = new System.Drawing.Point(90, 40);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(410, 432);
            this.pictureBox1.TabIndex = 0;
            this.pictureBox1.BackColor = Color.White;
            this.pictureBox1.TabStop = false;
            this.Controls.Add(this.pictureBox1);

            this.pictureBox1.MouseDown += new MouseEventHandler(OnMouseDown);
            this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);
       
        }
   
        //Context Menu
        void MenuOnClick(object obj, EventArgs ea)
        {       
        }
   
        //Button Rectangle
        void ButtonClick(object obj, EventArgs ea)
        {
            i = true;
        }
   
        //Button Ellipse
        void ButtonClick1(object obj, EventArgs ea)
        {
            y = true;
        }

    protected override void OnDoubleClick(EventArgs ea)
    {
        MessageBox.Show("Dobbeltklik virker");
    }

    void OnClick(object obj, EventArgs ea)
    {
        MessageBox.Show("Klik klik");
    }

        protected void OnMouseDown(object sender, MouseEventArgs mea)
        {
            if(i==true)
            {
                al.Add(new Point(mea.X, mea.Y));
                pictureBox1.Refresh();
            }
            i=false;
        }

        protected override void OnMouseMove(MouseEventArgs mea)
        {
            /*if((mea.Button & MouseButtons.Left) != 0)
            {
                Graphics grfx = CreateGraphics();
                grfx.DrawRectangle(new Pen(BackColor), mea.X, mea.Y, 120, 65);
                grfx.DrawLine(new Pen(BackColor), mea.X, (mea.Y + 20), (mea.X + 120), (mea.Y + 20));
                grfx.Dispose();
            }*/                                             
        }

        protected override void OnMouseUp(MouseEventArgs mea)
        {
            /*Graphics grfx = CreateGraphics();
            grfx.DrawRectangle(new Pen(ForeColor), mea.X, mea.Y, 120, 65);
            grfx.DrawLine(new Pen(ForeColor), mea.X, (mea.Y + 20), (mea.X + 120), (mea.Y + 20));
            grfx.Dispose();*/   
        }
   
        //Menu File
        void MenuFileOnPopup(object obj, EventArgs ea)
        {
            miFileSave.Enabled = bDocumentPresent;
        }
   
        //Menu Edit
        void MenuEditOnPopup(object obj, EventArgs ea)
        {
            miEditCut.Enabled = bNonNullSelection;
            miEditCopy.Enabled = bNonNullSelection;
            miEditPaste.Enabled = bStuffInClipBoard;
        }
   
        //File New Event
        void MenuFileNewOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }

        //File Open Event
        void MenuFileOpenOnClick(object obj, EventArgs ea)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "All Image Files|*.bmp;*.ico;*.gif;*.jpeg;*.jpg;" +
                "*.jfif;*.png;*.tif;*.tiff;*.wmf;*.emf|" +
                "Windows Bitmap (*.bmp)|*.bmp|" +
                "Windows Icon (*.ico)|*.ico|" +
                "Graphics Interchange Format (*.gif)|*.gif|" +
                "JPEG File Interchange Format (*.jpg)|" +
                "*.jpg;*.jpeg;*.jfif|" +
                "Portable Network Graphics (*.png)|*.png|" +
                "Tag Image File Format (*.tif)|*.tif;*.tiff|" +
                "Windows Metafile (*.wmf)|*.wmf|" +
                "Enhanced Metafile (*.emf)|*.emf|" +
                "All Files (*.*)|*.*";

            if(ofd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    image = Image.FromFile(ofd.FileName);
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message, strProgName);
                    return;
                }
                strFileName = ofd.FileName;
                Text = strProgName + " - " + Path.GetFileName(strFileName);
                Invalidate();
            }
        }
   
        //File Close Event
        void MenuFileCloseOnClick(object obj, EventArgs ea)
        {
            Close();
        }
   
        //File Save Event
        void MenuFileSaveOnClick(object obj, EventArgs ea)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.InitialDirectory  = Path.GetDirectoryName(strFileName);
            sfd.FileName = Path.GetFileNameWithoutExtension(strFileName);
            sfd.AddExtension = true;
            sfd.Filter = "Windows Bitmap (*.bmp)|*.bmp|" + "Graphics Interchange Format (*.gif)|*.gif|" +
                "JPEG File Interchange Format (*.jpg)|" + "*.jpg;*.jfif|" +
                "Portable Network Graphics (*.png)|*.png|" +
                "Tagged Imaged File Format (*.tif)|*.tif;*.tiff";

            if(sfd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    image.Save(sfd.FileName);
                }
                catch(Exception exc)
                {
                    MessageBox.Show(exc.Message, Text);
                    return;
                }
                strFileName = sfd.FileName;
                Text = strProgName + " - " + Path.GetFileName(strFileName);
                Invalidate();
            }                   
        }
   
        //File Page Setup Event
        void MenuFilePageSetupOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }
   
        //File Print Event
        void MenuFilePrintOnClick(object obj, EventArgs ea)
        {
            PrintDocument pdo = new PrintDocument();
            PrintDialog pda = new PrintDialog();
            pda.Document = pdo;

            pda.AllowSomePages = true;
            pda.PrinterSettings.MinimumPage = 1;
            pda.PrinterSettings.MaximumPage = iNumberOfPages;
            pda.PrinterSettings.FromPage = 1;
            pda.PrinterSettings.ToPage = iNumberOfPages;

            if(pda.ShowDialog() == DialogResult.OK)
            {
                pdo.DocumentName = Text;
                pdo.PrintPage += new PrintPageEventHandler(OnPrintPage);

                switch(pda.PrinterSettings.PrintRange)
                {
                    case PrintRange.AllPages:
                        iPagesToPrint = iNumberOfPages;
                        iPageNumber = 1;
                        break;
                    case PrintRange.SomePages:
                        iPagesToPrint = 1 + pda.PrinterSettings.ToPage -
                            pda.PrinterSettings.FromPage;
                        iPageNumber = pda.PrinterSettings.FromPage;
                        break;
                }
                pdo.Print();
            }
        }
   
        void OnPrintPage(object obj, PrintPageEventArgs ppea)
        {
            Graphics grfx = ppea.Graphics;
            Font font = new Font("Times New Roman", 360);
            string str = iPageNumber.ToString();
            SizeF sizef = grfx.MeasureString(str, font);

            grfx.DrawString(str, font, Brushes.Black, (grfx.VisibleClipBounds.Width - sizef.Width) / 2,
                (grfx.VisibleClipBounds.Height - sizef.Height) / 2);

            iPageNumber += 1;
            iPagesToPrint -= 1;
            ppea.HasMorePages = iPagesToPrint > 0;
        }
   
        //File Exit Event
        void MenuFileExitOnClick(object obj, EventArgs ea)
        {
            Close();
        }
   
        //Edit Undo Event
        void MenuEditUndoOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }

        //Edit Redo Event
        void MenuEditRedoOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }
   
        //Edit Cut Event
        void MenuEditCutOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }

        //Edit Copy Event
        void MenuEditCopyOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }

        //Edit Paste Event
        void MenuEditPasteOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("Endnu ikke implementeret");
        }

        //Help Help About Event
        void MenuHelpAboutOnClick(object obj, EventArgs ea)
        {
            MessageBox.Show("UML Design Tool v. 0.51 © 2004 by SNG,NHJ,MBN", Text);
        }

        //Toolbar Event
        void ToolBarOnClick(object obj, ToolBarButtonClickEventArgs tbbcea)
        {
            ToolBarButton tbb = tbbcea.Button;
            MenuItem mi = (MenuItem) tbb.Tag;

            mi.PerformClick();
        }

    private void pictureBox1_Paint(object obj, PaintEventArgs pea)
    {
        Graphics grfx = pea.Graphics;

        for(int i=0; i<al.Count;i++)
        {
            Point pt = (Point)al[i];
            grfx.DrawRectangle(new Pen(ForeColor), pt.X, pt.Y, 120, 65);
            grfx.DrawLine(new Pen(ForeColor), pt.X, (pt.Y + 20), (pt.X + 120), (pt.Y + 20));
        }
    }
}
Avatar billede wisen Nybegynder
02. november 2004 - 12:22 #1
Jeg er ikke lige helt sikker på spørgsmålet - men mon ikke det er noget med at I skal gemme mousePoint i OnMouseDown og så i OnMouseMove bruge det nye koordinat sammen med det "gamle" til at lave et rektangel ?
Avatar billede dr_chaos Nybegynder
02. november 2004 - 12:30 #2
jo men hvordan?
Avatar billede wisen Nybegynder
02. november 2004 - 12:36 #3
måske I kan bruge noget at det her: http://www.c-sharpcorner.com/Code/2002/Sept/FormMaker.asp
Avatar billede dr_chaos Nybegynder
02. november 2004 - 17:13 #4
nope søger mere noget med udgangspunkt i den given kildekode. Derfor giver jeg også 200 points.
Avatar billede macpain Nybegynder
02. november 2004 - 22:27 #5
Jeg har ikke selv brugt det men jeg ved tage man kan bruge clipping under GraphicsPath. Og herved flytte billedet rundt som man vil i sin form.
I stil med...
GraphicsPathpath = new GraphicsPath();
.
path.xxxxxx rectangle som i tegner
.
RectangleFrectf= path.GetBounds();
//Kunne være andet
bitmap = new Bitmap((int) rectf.Width, (int)rectf.Height, PixelFormat.Format32bppArgb);
Graphics grfx= Graphics.FromImage(bitmap);
grfx.SetClip(path);
grfx.DrawImage(image, X fra OnMouseMove , X fra OnMouseMove ,image.Width, image.Height);
grfx.Dispose();


Håber det hjælper!
Avatar billede dr_chaos Nybegynder
30. november 2004 - 01:11 #6
gjorde det desværre ikke.
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