2008-03-03 15:18:03 +00:00

87 lines
1.8 KiB
C#

using System;
using System.Windows.Forms;
using AT.STO.UI.Win;
namespace Volian.Controls.Library
{
internal class DropDownTree : TreeView, IDropDownAware
{
#region DropDownTree
public DropDownTree()
{
this.Dock = DockStyle.Top;
}
#endregion
#region TreeView Events
/// <summary>
/// Allow keeping track of the editing process.
/// </summary>
/// <param name="e"></param>
protected override void OnAfterSelect(TreeViewEventArgs e)
{
base.OnAfterSelect(e);
if (ValueChanged != null)
{
ValueChanged(this, new DropDownValueChangedEventArgs(e.Node));
}
}
/// <summary>
/// A double click on a node counts as finish editing.
/// </summary>
/// <param name="e"></param>
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));
}
}
/// <summary>
/// ENNTER counts as finish editing, ESC as cancel (null is returned).
/// </summary>
/// <param name="e"></param>
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
}
}