117 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace AT.STO.UI.Win
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// The form that pops up instead of the dropdown portion of the 
 | 
						|
	/// DropDownPanel's combobox. It containes the actual control to
 | 
						|
	/// display.
 | 
						|
	/// </summary>
 | 
						|
	internal partial class DropDownForm : Form, IDropDownAware
 | 
						|
	{
 | 
						|
	#region Private Variable Declaration
 | 
						|
		private IDropDownAware _control = null;
 | 
						|
	#endregion
 | 
						|
	#region Constructor / Destructor
 | 
						|
		/// <summary>
 | 
						|
		/// Default Constructor
 | 
						|
		/// </summary>
 | 
						|
		public DropDownForm()
 | 
						|
		{
 | 
						|
			InitializeComponent();
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Constructor to initialize the for with the control to display.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="Ctrl">The control to display.</param>
 | 
						|
		public DropDownForm(IDropDownAware Ctrl) : this()
 | 
						|
		{	
 | 
						|
			if (Ctrl != null)
 | 
						|
			{
 | 
						|
				_control = Ctrl;
 | 
						|
				
 | 
						|
				InitializeControl(_control as Control);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	#endregion
 | 
						|
	#region Form Events
 | 
						|
		protected override void OnClosing(CancelEventArgs e)
 | 
						|
		{
 | 
						|
			this.Controls.Remove(_control as Control);
 | 
						|
			base.OnClosing(e);
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void OnShown(EventArgs e)
 | 
						|
		{
 | 
						|
			base.OnShown(e);
 | 
						|
			
 | 
						|
			_control.FinishEditing += new DropDownValueChangedEventHandler(Ctrl_FinishEditing);
 | 
						|
			_control.ValueChanged += new DropDownValueChangedEventHandler(Ctrl_ValueChanged);
 | 
						|
		}
 | 
						|
	#endregion
 | 
						|
	#region Event Handler
 | 
						|
	    private void Ctrl_FinishEditing(object sender, DropDownValueChangedEventArgs e)
 | 
						|
	    {
 | 
						|
			if (this.FinishEditing != null)
 | 
						|
			{
 | 
						|
				this.FinishEditing(this, e);
 | 
						|
			}
 | 
						|
 | 
						|
			_control.FinishEditing -= new DropDownValueChangedEventHandler(Ctrl_FinishEditing);
 | 
						|
			_control.ValueChanged -= new DropDownValueChangedEventHandler(Ctrl_ValueChanged);
 | 
						|
	    }
 | 
						|
	    
 | 
						|
	    private void Ctrl_ValueChanged(object sender, DropDownValueChangedEventArgs e)
 | 
						|
	    {
 | 
						|
			if (this.ValueChanged != null)
 | 
						|
			{
 | 
						|
				this.ValueChanged(this, e);
 | 
						|
			}
 | 
						|
	    }
 | 
						|
	#endregion
 | 
						|
	#region IDropDownAware Implementation
 | 
						|
		/// <summary>
 | 
						|
		/// Fired either on OK, Cancel or a click outside the control to indicate
 | 
						|
		/// that the user has finished editing.
 | 
						|
		/// </summary>
 | 
						|
		public event DropDownValueChangedEventHandler FinishEditing;
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// Fired on any change of the controls's value during the editing process. 
 | 
						|
		/// </summary>
 | 
						|
		public event DropDownValueChangedEventHandler ValueChanged;
 | 
						|
		
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets the controls' value.
 | 
						|
		/// </summary>
 | 
						|
		public object Value
 | 
						|
		{
 | 
						|
			get { return _control.Value; }
 | 
						|
			set { _control.Value = value; }
 | 
						|
		}
 | 
						|
	#endregion
 | 
						|
	#region Private Methods
 | 
						|
		private void InitializeControl(Control Ctrl)
 | 
						|
		{
 | 
						|
			Size	size	= Ctrl.Size;
 | 
						|
			Size	inner	= this.ClientRectangle.Size;
 | 
						|
			Size	outer	= this.Size;
 | 
						|
			int		gap		= outer.Width - inner.Width;
 | 
						|
			
 | 
						|
			size.Width += gap;
 | 
						|
			size.Height += gap;
 | 
						|
			
 | 
						|
			this.Size = size;
 | 
						|
			this.Controls.Add(Ctrl);
 | 
						|
			Ctrl.Location = new Point(0, 0);
 | 
						|
			Ctrl.Visible = true;
 | 
						|
			Ctrl.Invalidate();
 | 
						|
		}
 | 
						|
	#endregion
 | 
						|
	}
 | 
						|
}
 |