⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 designpane.cs

📁 是用c#实现的一个有关于报表设计的程序代码
💻 CS
📖 第 1 页 / 共 2 页
字号:
#region License
/*
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
*/
#endregion

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Windows.Forms;
using System.Drawing.Printing;
using daReport;


namespace daReportDesigner
{
	#region Custom Delegate Declaration
	public delegate void SelectionChangedHandler(ArrayList obj);
	#endregion

	public class DesignPane : System.Windows.Forms.UserControl
	{
		#region Declarations
		private System.ComponentModel.Container components = null;
		
		ICustomPaint[] staticObjects;
		ICustomPaint[] dynamicObjects;
		PageSettings pageSettings;

		private bool shouldRepaint = false;
		private bool mouseDown = false;
		private bool mControlPressed = false;
		public enum RESIZE_BORDER { NONE = 0, TOP, RIGHT, BOTTOM, LEFT };
		private RESIZE_BORDER mBorder = 0;
		public enum MOUSE_MODE { NONE = 0, SELECTED };
		private MOUSE_MODE mMouseMode = 0;

		Image drawingImage;
		Image trackerImage;
		//ICustomPaint selectedObject;
		ArrayList mSelectedObjects = new ArrayList();
		TrackerRectangle selectionRectangle;
		private Point ptStart = new Point(0,0);
		
		private Brush brushBg;
		private bool showGrid = false;
		private int gridSize = 8;
		private SolidBrush gridBrush = new SolidBrush(Color.Gainsboro);
		private Bitmap backImage;

		#region Public Event Declarations

		public event SelectionChangedHandler OnSelectionChanged;
		
		public event SelectionChangedHandler OnMoving;
		
		public event SelectionChangedHandler OnMoveFinished;

		#endregion
		#endregion

		#region Control and Object Event Handlers

		private void DesignPane_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			mouseDown = true;

			if ( this.Cursor == Cursors.SizeNS || this.Cursor == Cursors.SizeWE )
			{
				mMouseMode = MOUSE_MODE.SELECTED;
				return;
			}

			ptStart = new Point(e.X, e.Y);

			object t = FindObjectAt(e.X,e.Y);

			if (!this.mControlPressed)
				this.mSelectedObjects.Clear();

			if (t != null)
			{
				if (mSelectedObjects.Contains(t))
					mSelectedObjects.Remove(t);
				else
				{
					if (((daReport.ICustomPaint)t).Selectable)
						mSelectedObjects.Add(t);
				}

				switch (t.GetType().ToString())
				{
					case ("daReport.ChartBox"):
						if (((daReport.ChartBox)t).Selectable)
							mMouseMode = MOUSE_MODE.SELECTED;
						else
						{
							mMouseMode = MOUSE_MODE.NONE;
							//t = selectedObject;
						}
						break;
					case ("daReport.PictureBox"):
						if (((daReport.PictureBox)t).Selectable)
							mMouseMode = MOUSE_MODE.SELECTED;
						else
						{
							mMouseMode = MOUSE_MODE.NONE;
							//t = selectedObject;
						}
						break;
					case ("daReport.StyledTable"):
						if (((daReport.StyledTable)t).Selectable)
							mMouseMode = MOUSE_MODE.SELECTED;
						else
						{
							mMouseMode = MOUSE_MODE.NONE;
							//t = selectedObject;
						}
						break;
					case ("daReport.TextField"):
						if (((daReport.TextField)t).Selectable)
							mMouseMode = MOUSE_MODE.SELECTED;
						else
						{
							mMouseMode = MOUSE_MODE.NONE;
							//t = selectedObject;
						}
						break;
					case ("daReport.Line"):
						if (((daReport.Line)t).Selectable)
							mMouseMode = MOUSE_MODE.SELECTED;
						else
						{
							mMouseMode = MOUSE_MODE.NONE;
							//t = selectedObject;
						}
						break;
					default:
						mMouseMode = MOUSE_MODE.SELECTED;
						break;
				}
			}
			else
				mMouseMode = MOUSE_MODE.NONE;

			this.SelectObjects((ArrayList)this.mSelectedObjects.Clone());

			if(OnSelectionChanged!=null)
				OnSelectionChanged(this.mSelectedObjects);
			/*
			if ( t!= selectedObject )
			{
				if(OnSelectionChanged!=null)
					OnSelectionChanged((ICustomPaint)t);
			}
			*/

		}


		private void DesignPane_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			mouseDown = false;
			mMouseMode = MOUSE_MODE.NONE;

			if(shouldRepaint)
			{
				shouldRepaint = false;
				DoPaint();

				if(OnMoveFinished!=null)
					OnMoveFinished(this.mSelectedObjects);
			}
		}


		public void DesignPane_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			//this.Focus();
			if (mouseDown)
			{
				if (mMouseMode == MOUSE_MODE.SELECTED)
				{
					if (mBorder != RESIZE_BORDER.NONE)
					{
						foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
						{
							switch(mBorder)
							{
								case RESIZE_BORDER.TOP:
									if (CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.None)
									{
										CurrentObject.Height = CurrentObject.Y + CurrentObject.Height - e.Y;
										CurrentObject.Y = e.Y;
									}
									else if (CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.Bottom || CurrentObject.VerticalAlignment == ICustomPaint.VerticalAlignmentTypes.Middle)
									{
										CurrentObject.Y = e.Y;
									}

									break;
								case RESIZE_BORDER.RIGHT:
									CurrentObject.Width = e.X - CurrentObject.X;

									break;
								case RESIZE_BORDER.BOTTOM:
									CurrentObject.Height = e.Y - CurrentObject.Y;

									break;
								case RESIZE_BORDER.LEFT:
									if (CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.None)
									{
										CurrentObject.Width = CurrentObject.X + CurrentObject.Width - e.X;
										CurrentObject.X = e.X;
									}
									else if (CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.Right || CurrentObject.HorizontalAlignment == ICustomPaint.HorizontalAlignmentTypes.Center)
									{
										CurrentObject.X = e.X;
									}

									break;
							}

							selectionRectangle = new TrackerRectangle(CurrentObject.GetRegion(), CurrentObject.HorizontalAlignment, CurrentObject.VerticalAlignment);

							trackerImage.Dispose();
							trackerImage = (Bitmap)drawingImage.Clone();							
							selectionRectangle.DrawSelectionTrackers((Bitmap)trackerImage);
							PaintImage(trackerImage);
						}
							
						shouldRepaint = true;
					}
					else
					{
						if ( Math.Abs(e.X-ptStart.X)>0 || Math.Abs(e.Y-ptStart.Y)>0)
						{
							foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
							{
								this.MoveSelection(CurrentObject, CurrentObject.X+e.X-ptStart.X, CurrentObject.Y+e.Y-ptStart.Y);
							}

							ptStart = new Point(e.X, e.Y);
						}												
					}

					if(OnMoving!=null)
						OnMoving(this.mSelectedObjects);
				}
			}
			else
			{
				if (selectionRectangle!=null)
				{
					int nResult = 0;
					this.Cursor = selectionRectangle.CursorCheck(new Point(e.X, e.Y), ref nResult);
					this.mBorder = (RESIZE_BORDER)nResult;
				}
			}
		}


		public void DesignPane_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if (e.Control)
				this.mControlPressed = true;

			if (this.mSelectedObjects.Count>0)
			{
				if (e.KeyCode == Keys.Down && e.Modifiers == Keys.Control)
				{
					foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
					{
						MoveSelection(CurrentObject, CurrentObject.X, CurrentObject.Y+1);
					}
					//MoveSelection(selectedObject.X,selectedObject.Y+1);
				}
				else if (e.KeyCode == Keys.Up && e.Modifiers == Keys.Control)
				{
					foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
					{
						MoveSelection(CurrentObject, CurrentObject.X, CurrentObject.Y-1);
					}
					//MoveSelection(selectedObject.X,selectedObject.Y-1);
				}
				else if (e.KeyCode == Keys.Left && e.Modifiers == Keys.Control)
				{
					foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
					{
						MoveSelection(CurrentObject, CurrentObject.X-1, CurrentObject.Y);
					}
					//MoveSelection(selectedObject.X-1,selectedObject.Y);
				}
				else if (e.KeyCode == Keys.Right && e.Modifiers == Keys.Control)
				{
					foreach (ICustomPaint CurrentObject in this.mSelectedObjects)
					{
						MoveSelection(CurrentObject, CurrentObject.X+1, CurrentObject.Y);
					}
					//MoveSelection(selectedObject.X+1,selectedObject.Y);
				}
				else
				{
					return;
				}

				if(OnMoving!=null)
					OnMoving(this.mSelectedObjects);
			}
		}


		public void DesignPane_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			this.mControlPressed = false;

			if (this.mSelectedObjects.Count > 0)
			{
				if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Up || e.KeyCode == Keys.Right || e.KeyCode == Keys.Left)
				{
					if(shouldRepaint)
					{
						shouldRepaint = false;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -