100 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| using System.ComponentModel;
 | |
| 
 | |
| namespace DevComponents.Tree
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Represents the text box for editing cell's text.
 | |
| 	/// </summary>
 | |
| 	[Designer(typeof(System.Windows.Forms.Design.ControlDesigner)),ToolboxItem(false)]
 | |
| 	internal class TextBoxEx:TextBox
 | |
| 	{
 | |
| 		#region Private variables
 | |
| 		private bool m_WordWrap=false;
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Events
 | |
| 		public event EventHandler EndEdit;
 | |
| 		public event EventHandler CancelEdit;
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Constructor
 | |
| 		public TextBoxEx():base()
 | |
| 		{
 | |
| 			this.AutoSize=false;
 | |
| 			this.BorderStyle=System.Windows.Forms.BorderStyle.None;
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Internal Implementation
 | |
| 		protected override void OnKeyDown(KeyEventArgs e)
 | |
| 		{
 | |
| 			base.OnKeyDown(e);
 | |
| 
 | |
| 			if(e.KeyCode==Keys.Enter && !m_WordWrap || e.KeyCode==Keys.Enter && e.Modifiers==Keys.Control)
 | |
| 			{
 | |
| 				if(EndEdit!=null)
 | |
| 					EndEdit(this, new EventArgs());
 | |
| 			}
 | |
| 			else if(e.KeyCode==Keys.Escape)
 | |
| 			{
 | |
| 				if(CancelEdit!=null)
 | |
| 					CancelEdit(this,new EventArgs());
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnTextChanged(EventArgs e)
 | |
| 		{
 | |
| 			base.OnTextChanged (e);
 | |
| 			ResizeControl();
 | |
| 		}
 | |
| 
 | |
| 		private void ResizeControl()
 | |
| 		{
 | |
| 			Graphics g=this.CreateGraphics();
 | |
| 			SizeF size=g.MeasureString(this.Text,this.Font);
 | |
| 			int width=(int)Math.Ceiling(size.Width);
 | |
| 			int height=(int)Math.Ceiling(size.Height);
 | |
| 			if(this.Parent!=null && this.Right+(width-this.Width)>this.Parent.Right)
 | |
| 				return;
 | |
| 			if(width>this.Width)
 | |
| 				this.Width=width;
 | |
| 
 | |
| 			if(m_WordWrap)
 | |
| 			{
 | |
| 				if(this.Parent!=null && this.Bottom+(height-this.Height)>this.Parent.Bottom)
 | |
| 					return;
 | |
| 				if(height>this.Height)
 | |
| 					this.Height=height;
 | |
| 			}
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Public Properties
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Gets or sets whether the editing is in word-wrap mode.
 | |
| 		/// </summary>
 | |
| 		public bool EditWordWrap
 | |
| 		{
 | |
| 			get {return m_WordWrap;}
 | |
| 			set
 | |
| 			{
 | |
| 				m_WordWrap=value;
 | |
| 				if(m_WordWrap)
 | |
| 				{
 | |
| 					this.Multiline=true;
 | |
| 					this.ScrollBars=ScrollBars.None;
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					this.Multiline=false;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		#endregion
 | |
| 	}
 | |
| }
 |