81 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for BarTextBox.
 | 
						|
	/// </summary>
 | 
						|
	internal class BarTextBox:TextBox
 | 
						|
	{
 | 
						|
		private int m_LastFocusWindow;
 | 
						|
		private string m_OriginalText;
 | 
						|
		public BarTextBox()
 | 
						|
		{
 | 
						|
			this.BorderStyle=System.Windows.Forms.BorderStyle.None;
 | 
						|
			this.AutoSize=false;
 | 
						|
			this.TabStop=false;
 | 
						|
			m_LastFocusWindow=0;
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void WndProc(ref Message m)
 | 
						|
		{
 | 
						|
			if(m.Msg==NativeFunctions.WM_SETFOCUS)
 | 
						|
			{
 | 
						|
				m_LastFocusWindow=m.WParam.ToInt32();
 | 
						|
				m_OriginalText=this.Text;
 | 
						|
			}
 | 
						|
			base.WndProc(ref m);
 | 
						|
		}
 | 
						|
 | 
						|
		public void ReleaseFocus()
 | 
						|
		{
 | 
						|
			if(this.Focused && m_LastFocusWindow!=0)
 | 
						|
			{
 | 
						|
				int focus=m_LastFocusWindow;
 | 
						|
				m_LastFocusWindow=0;
 | 
						|
				Control ctrl=Control.FromChildHandle(new System.IntPtr(focus));
 | 
						|
				if(ctrl!=this)
 | 
						|
				{
 | 
						|
					Control p=this.Parent;
 | 
						|
					while(p!=null)
 | 
						|
					{
 | 
						|
						if(p==ctrl)
 | 
						|
							return;
 | 
						|
						p=p.Parent;
 | 
						|
					}
 | 
						|
 | 
						|
					if(ctrl!=null)
 | 
						|
						ctrl.Focus();
 | 
						|
					else
 | 
						|
					{
 | 
						|
						NativeFunctions.SetFocus(focus);
 | 
						|
					}
 | 
						|
				}
 | 
						|
                
 | 
						|
				//this.OnLostFocus(new System.EventArgs());
 | 
						|
				//this.InvokeLostFocus(this,new System.EventArgs());
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnKeyDown(KeyEventArgs e)
 | 
						|
		{
 | 
						|
			if(e.KeyCode==Keys.Enter)
 | 
						|
				ReleaseFocus();
 | 
						|
			else if(e.KeyCode==Keys.Escape)
 | 
						|
			{
 | 
						|
				this.Text=m_OriginalText;
 | 
						|
				ReleaseFocus();
 | 
						|
			}
 | 
						|
 | 
						|
			base.OnKeyDown(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnLostFocus(EventArgs e)
 | 
						|
		{
 | 
						|
			m_LastFocusWindow=0;
 | 
						|
			base.OnLostFocus(e);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |