using System;
using System.Windows.Forms;
using AT.STO.UI.Win;
namespace Demo
{
internal class DropDownTree : TreeView, IDropDownAware
{
#region DropDownTree
public DropDownTree()
{
}
#endregion
#region TreeView Events
///
/// Allow keeping track of the editing process.
///
///
protected override void OnAfterSelect(TreeViewEventArgs e)
{
base.OnAfterSelect(e);
if (ValueChanged != null)
{
ValueChanged(this, new DropDownValueChangedEventArgs(e.Node));
}
}
///
/// A double click on a node counts as finish editing.
///
///
protected override void OnDoubleClick(EventArgs e)
{
base.OnDoubleClick(e);
TreeNode node = HitTest(PointToClient(Cursor.Position)).Node;
if ((FinishEditing != null) && (node != null))
{
FinishEditing(this, new DropDownValueChangedEventArgs(node));
}
}
///
/// ENNTER counts as finish editing, ESC as cancel (null is returned).
///
///
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
if (FinishEditing != null)
{
switch (e.KeyCode)
{
case Keys.Enter:
FinishEditing(this, new DropDownValueChangedEventArgs(Value));
break;
case Keys.Escape:
FinishEditing(this, new DropDownValueChangedEventArgs(null));
break;
}
}
}
#endregion
#region IDropDownAware Implementation
public event DropDownValueChangedEventHandler FinishEditing;
public event DropDownValueChangedEventHandler ValueChanged;
public object Value
{
get { return base.SelectedNode; }
set
{
if (value is DropDownNode)
{
base.SelectedNode = value as DropDownNode;
}
}
}
#endregion
}
}