containercontrol.cs

来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 208 行

CS
208
字号
/*
 * Created by SharpDevelop.
 * User: Forstmeier Peter
 * Date: 25.05.2006
 * Time: 09:19
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.Drawing;
using System.Windows.Forms;

namespace SharpReport.Designer{

	/// <summary>
	/// Description of ContainerControl.
	/// </summary>
	public class ContainerControl:ReportControlBase,ITracker{
		private RectTracker rectTracker = new RectTracker();
		private ReportControlBase selectedControl;
		
		public ContainerControl():base(){
		this.Body.MouseMove += new MouseEventHandler( OnMouseMove);
		this.Body.MouseDown += new MouseEventHandler(OnMouseDown);
		}
		
		private Rectangle GetParentRectangle () {
			return this.Body.ClientRectangle;
		}
		
		protected override void OnPaint(System.Windows.Forms.PaintEventArgs e){
			base.OnPaint(e);
		}
		
		#region overrides
	/*
		protected override CreateParams CreateParams{ 
			get { 
				CreateParams cp=base.CreateParams; 
				cp.ExStyle|=0x00000020; //WS_EX_TRANSPARENT 
				return cp; 
			} 
		} 
		*/
		#endregion
		
		private void OnMouseDown(object sender, System.Windows.Forms.MouseEventArgs e){			
		
			if (this.rectTracker == null) {
				return;
			}
			if(e.Button != MouseButtons .Left){
				return;
			}	
			Point pt = this.Body.PointToClient(Cursor.Position);
			
			Rectangle rcForm = GetParentRectangle();
			
			if(rcForm.Contains(pt)){
				Rectangle rcObject;
				if (this.rectTracker.HitTest(pt) == RectTracker.TrackerHit.hitNothing) {
//					System.Console.WriteLine("2");
					this.selectedControl = null;
					this.rectTracker.m_rect = new Rectangle(0,0,0,0);
					// just to demonstrate RectTracker::TrackRubberBand
					RectTracker tracker=new RectTracker();
					if (tracker.TrackRubberBand(this.Body, pt, false)){
						// see if rubber band intersects with the doc's tracker		

						tracker.NormalizeRect(ref tracker.m_rect);
						Rectangle rectIntersect = tracker.m_rect;
						foreach (Control ctrl in this.Body.Controls){
							rcObject = ctrl.Bounds;
							if(tracker.m_rect.Contains(rcObject)){
								
								this.rectTracker.m_rect = rcObject;
								this.selectedControl = (ReportControlBase)ctrl;
								this.selectedControl.Selected = true;
								// MainForm.m_propertyWindow.SetSelectedObject(m_seletedCtrl);
								break;
							}
						}
					}
					else{
						
						// No rubber band, see if the point selects an object.
						
						foreach (Control ctrl in this.Body.Controls){
							rcObject = ctrl.Bounds ;
							if(rcObject.Contains(pt)){
								
								this.rectTracker.m_rect = rcObject;
								this.selectedControl = (ReportControlBase)ctrl;
								this.selectedControl.Selected = true;
//								MainForm.m_propertyWindow.SetSelectedObject(ctrl);
								break;
							}
						}
					}
					if(this.selectedControl == null){
//						NotifySectionClick();
						
//						MainForm.m_propertyWindow.SetSelectedObject(m_Form);
//						m_FormTracker.m_rect = rcForm;
					}
					else{
//						System.Console.WriteLine("6");
//						m_FormTracker.Clear();
						
					}
				}
				else if(this.selectedControl != null){// normal tracking action, when tracker is hit	
//					System.Console.WriteLine("7");
					if (this.rectTracker.Track(this.Body, pt, false,null)) {
						Rectangle rc = this.rectTracker.m_rect;
						this.selectedControl.SetBounds(rc.Left, rc.Top, rc.Width, rc.Height);
					}
				}
			}
			else{
				if(this.selectedControl == null){//select the container form
//					System.Console.WriteLine("9");
//					MainForm.m_propertyWindow.SetSelectedObject(m_Form);
					/*
					if(m_FormTracker.HitTest(pt) == RectTracker.TrackerHit.hitNothing)
					{
						m_FormTracker.m_rect = rcForm;		
					}
					else if(!m_FormTracker.IsEmpty()) 
					{
						m_FormTracker.Track(this, pt, false,null);
					}
					*/
				}
				else{
//					System.Console.WriteLine("10");
//					m_FormTracker.Clear();
				}
			}
			this.InvalidateEx();
			
		}
			
		private void OnMouseMove (object sender, MouseEventArgs e) {
			
			if (this.rectTracker != null) {
				Point mousept=new Point(e.X,e.Y);
				
				if(this.selectedControl != null){
					if(!rectTracker.SetCursor(this,0,mousept))
						this.Cursor=Cursors.Arrow;
				}
				
//			else{
//				if(!m_FormTracker.SetCursor(this,0,mousept))
//					this.Cursor=Cursors.Arrow;
//			}
			}
		}
		
		#region ITracker implementation
		
		public virtual void ClearSelections() {
			base.ControlHelper.Clear(this);
			this.selectedControl = null;
			this.InvalidateEx();
		}
		
		public ReportControlBase SelectedControl {
			set {
				this.selectedControl = value;
			}
		}
		
		public RectTracker RectTracker {
			get {
				return this.rectTracker;
			}
		}
		
		public System.Windows.Forms.Control DesignSurface {
			get {
				return this.Body;
			}
		}
		
		public void InvalidateEx(){
			this.Invalidate();
			
			if (this.Parent ==  null) {
				return;
			}
			Rectangle rc = new Rectangle  (this.Body.Location,this.Body.Size);
			this.Invalidate(rc,true);
			
			if(this.selectedControl != null){
				rc = this.rectTracker.m_rect;
			
				this.selectedControl.SetBounds(rc.Left, rc.Top, rc.Width, rc.Height);
				this.selectedControl.Invalidate();
			}
		}
		
		#endregion
	}
}

⌨️ 快捷键说明

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