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));
}
}
}
