2008-03-03 15:21:15 +00:00

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
}
}