SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample inspects events generated by the tree control.
The source code is located at C:\Program Files (x86)\Softelvdm\SftTree NET 2.0\Samples\CSharp\EventViewer.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;
using Softelvdm.SftTreeNET;
namespace EventViewer {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
sftTreeList.ItemCollection.Clear();
sftTree1.Columns.MakeOptimal(0, false);
sftTree1.RowHeaders.MakeOptimal(0, false);
sftTree1.Splitter.MakeOptimal();
sftTree1.RecalcHorizontalExtent();
}
private string strLastEvent = "";
private bool fLastEventDup = false;
// This is a small helper routine to show all properties and fields of an object
private void DumpValues(string title, object o) {
string s = "";
if (strLastEvent == title) {
if (!fLastEventDup) {
s = "Additional " + title + " events ... now suppressed";
fLastEventDup = true;
} else
return;
} else {
strLastEvent = title;
fLastEventDup = false;
PropertyInfo[] api = o.GetType().GetProperties();
foreach (PropertyInfo pi in api)
s += pi.Name + "=" + pi.GetValue(o, new object[] ) + " ";
FieldInfo[] afi = o.GetType().GetFields();
foreach (FieldInfo fi in afi)
s += fi.Name + "=" + fi.GetValue(o) + " ";
}
ItemClass item = sftTreeList.ItemCollection.Add(new string[] { title, s });
item.Selected = true;
sftTreeList.Columns.MakeOptimal(50, true);
sftTreeList.RecalcHorizontalExtent();
}
private void sftTree1_CheckBoxClicked(object sender, Softelvdm.SftTreeNET.PartEventArgs e) {
DumpValues("CheckBoxClicked", e);
}
private void sftTree1_ColumnReordered(object sender, Softelvdm.SftTreeNET.ColumnReorderedEventArgs e) {
DumpValues("ColumnReordered", e);
}
private void sftTree1_ColumnResized(object sender, Softelvdm.SftTreeNET.ColumnResizedEventArgs e) {
DumpValues("ColumnResized", e);
}
private void sftTree1_DragDetected(object sender, Softelvdm.SftTreeNET.DragDetectedEventArgs e) {
DumpValues("DragDetected", e);
if (e.Item.UsageLocation != UsageLocationEnum.items)
return; // ignore header/footer dragging
e.Handled = true;
sftTree1.DoDragDrop("In this example, we are dragging a simple text string", DragDropEffects.Copy);
}
private void sftTree1_DragDrop(object sender, DragEventArgs e) {
DumpValues("DragDrop", e);
}
private void sftTree1_DragEnter(object sender, DragEventArgs e) {
DumpValues("DragEnter", e);
e.Effect = DragDropEffects.Copy; // accept anything
}
private void sftTree1_DragLeave(object sender, EventArgs e) {
DumpValues("DragLeave", e);
}
private void sftTree1_DragOver(object sender, DragEventArgs e) {
DumpValues("DragOver", e);
e.Effect = DragDropEffects.Copy; // accept anything
}
private void sftTree1_EditAllowed(object sender, Softelvdm.SftTreeNET.EditAllowedEventArgs e) {
DumpValues("EditAllowed", e);
e.Allowed = (e.Cell.ColumnIndex == 2); // only edit cells in column 2
}
private void sftTree1_EditClickOutside(object sender, Softelvdm.SftTreeNET.EditClickOutsideEventArgs e) {
DumpValues("EditClickOutside", e);
}
private void sftTree1_EditEnded(object sender, Softelvdm.SftTreeNET.EditEndedEventArgs e) {
DumpValues("EditEnded", e);
// save the new cell text if necessary
if (e.SaveValue)
e.Cell.Text = textBox1.Text;
// hide the text box and make the form the control's parent
textBox1.Visible = false;
textBox1.Enabled = false;
textBox1.Parent = sftTree1.Parent;
}
private void sftTree1_EditSetup(object sender, Softelvdm.SftTreeNET.EditSetupEventArgs e) {
DumpValues("EditSetup", e);
textBox1.Parent = sftTree1; // make the tree control the parent window
textBox1.Text = e.Cell.Text;
int h = textBox1.Height;
Rectangle r = e.rCell;
// limit the control to the right pane - all cell editing takes place in right pane
r.Intersect(sftTree1.Splitter.Right.ItemsArea);
int vOffs = (r.Size.Height - textBox1.Height) / 2;
textBox1.Location = new Point(r.Location.X, r.Location.Y + vOffs);
textBox1.Width = r.Width;
// make it visible and enable it
textBox1.Enabled = true;
textBox1.Visible = true;
// off we go!
textBox1.BringToFront();
textBox1.Focus();
e.EditControl = textBox1;
}
private void sftTree1_EditValidate(object sender, Softelvdm.SftTreeNET.EditValidateEventArgs e) {
DumpValues("EditValidate", e);
}
private void sftTree1_Enter(object sender, EventArgs e) {
DumpValues("Enter", e);
}
private void sftTree1_FocusObjectChanged(object sender, EventArgs e) {
DumpValues("FocusObjectChanged", e);
}
private void sftTree1_FooterClicked(object sender, Softelvdm.SftTreeNET.FooterClickedEventArgs e) {
DumpValues("FooterClicked", e);
}
private void sftTree1_FooterDoubleClicked(object sender, Softelvdm.SftTreeNET.FooterClickedEventArgs e) {
DumpValues("FooterDoubleClicked", e);
}
private void sftTree1_FooterHeightChanged(object sender, EventArgs e) {
DumpValues("FooterHeightChanged", e);
}
private void sftTree1_GiveFeedback(object sender, GiveFeedbackEventArgs e) {
DumpValues("GiveFeedback", e);
}
private void sftTree1_HeaderClicked(object sender, Softelvdm.SftTreeNET.HeaderClickedEventArgs e) {
DumpValues("HeaderClicked", e);
}
private void sftTree1_HeaderDoubleClicked(object sender, Softelvdm.SftTreeNET.HeaderClickedEventArgs e) {
DumpValues("HeaderDoubleClicked", e);
}
private void sftTree1_HeaderHeightChanged(object sender, EventArgs e) {
DumpValues("HeaderHeightChanged", e);
}
private void sftTree1_HorizontalOffsetChanged(object sender, Softelvdm.SftTreeNET.HorizontalOffsetChangedEventArgs e) {
DumpValues("HorizontalOffsetChanged", e);
}
private void sftTree1_ItemClick(object sender, Softelvdm.SftTreeNET.ItemClickEventArgs e) {
DumpValues("ItemClick", e);
if (e.Item != null && e.Cell != null && e.Item.UsageLocation == UsageLocationEnum.items && e.Cell.ColumnIndex == 2)
e.Cell.Edit(); // Start cell editing
}
private void sftTree1_ItemCollapsed(object sender, Softelvdm.SftTreeNET.ItemCollapsedEventArgs e) {
DumpValues("ItemCollapsed", e);
}
private void sftTree1_ItemDoubleClick(object sender, Softelvdm.SftTreeNET.ItemClickEventArgs e) {
DumpValues("ItemDoubleClick", e);
}
private void sftTree1_ItemExpanded(object sender, Softelvdm.SftTreeNET.ItemExpandedEventArgs e) {
DumpValues("ItemExpanded", e);
}
private void sftTree1_ItemReleased(object sender, ItemClickEventArgs e) {
DumpValues("ItemReleased", e);
}
private void sftTree1_ItemRemoved(object sender, Softelvdm.SftTreeNET.ItemRemovedEventArgs e) {
DumpValues("ItemRemoved", e);
}
private void sftTree1_KeyDown(object sender, KeyEventArgs e) {
DumpValues("KeyDown", e);
}
private void sftTree1_KeyPress(object sender, KeyPressEventArgs e) {
DumpValues("KeyPress", e);
}
private void sftTree1_KeyUp(object sender, KeyEventArgs e) {
DumpValues("KeyUp", e);
}
private void sftTree1_Leave(object sender, EventArgs e) {
DumpValues("Leave", e);
}
private void sftTree1_MouseClick(object sender, MouseEventArgs e) {
DumpValues("MouseClick", e);
}
private void sftTree1_MouseDoubleClick(object sender, MouseEventArgs e) {
DumpValues("MouseDoubleClick", e);
}
private void sftTree1_MouseDown(object sender, MouseEventArgs e) {
DumpValues("MouseDown", e);
}
private void sftTree1_MouseEnter(object sender, EventArgs e) {
DumpValues("MouseEnter", e);
}
private void sftTree1_MouseHover(object sender, EventArgs e) {
DumpValues("MouseHover", e);
}
private void sftTree1_MouseLeave(object sender, EventArgs e) {
DumpValues("MouseLeave", e);
}
private void sftTree1_MouseMove(object sender, MouseEventArgs e) {
// DumpValues("MouseMove", e); // deliberately suppressed
}
private void sftTree1_MouseMoveHoverTimer(object sender, EventArgs e) {
DumpValues("MouseMoveHoverTimer", e);
}
private void sftTree1_MouseMoveTimer(object sender, EventArgs e) {
DumpValues("MouseMoveTimer", e);
}
private void sftTree1_MouseUp(object sender, MouseEventArgs e) {
DumpValues("MouseUp", e);
}
private void sftTree1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
DumpValues("PreviewKeyDown", e);
}
private void sftTree1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) {
DumpValues("QueryContinueDrag", e);
}
private void sftTree1_RadioButtonClicked(object sender, Softelvdm.SftTreeNET.PartEventArgs e) {
DumpValues("RadioButtonClicked", e);
}
private void sftTree1_SelectionChanged(object sender, EventArgs e) {
DumpValues("SelectionChanged", e);
}
private void sftTree1_ShowScrollTip(object sender, Softelvdm.SftTreeNET.ToolTipEventArgs e) {
DumpValues("ShowScrollTip", e);
}
private void sftTree1_ShowToolTip(object sender, Softelvdm.SftTreeNET.ToolTipEventArgs e) {
DumpValues("ShowToolTip", e);
if (e.Usage == UsageLocationEnum.items && e.Cell != null && e.Cell.OwningItem.VisibleIndex == 2 && e.Cell.ColumnIndex == 3) {
e.ToolTipIcon = ToolTipIcon.Info;
e.ToolTipTitle = "Balloon Tooltip";
e.ToolTipStyle = Softelvdm.Controls.ToolTipAppearanceEnum.Balloon;
e.ToolTipText = "A simple explanatory tooltip\nfor just this cell";
}
}
private void sftTree1_SplitterOffsetChanged(object sender, EventArgs e) {
DumpValues("SplitterOffsetChanged", e);
}
private void sftTree1_TopItemChanged(object sender, EventArgs e) {
DumpValues("TopItemChanged", e);
}
// Handle all the cell navigation for the text box here
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Up) {
sftTree1.EditNavigate(EditNavigateEnum.Up);
e.Handled = true;
} else if (e.KeyCode == Keys.Down) {
sftTree1.EditNavigate(EditNavigateEnum.Down);
e.Handled = true;
} else if (e.KeyCode == Keys.Left && (e.Modifiers & Keys.Control) != 0) { // Ctrl+Left
sftTree1.EditNavigate(EditNavigateEnum.Left);
e.Handled = true;
} else if (e.KeyCode == Keys.Right && (e.Modifiers & Keys.Control) != 0) { // Ctrl+Right
sftTree1.EditNavigate(EditNavigateEnum.Right);
e.Handled = true;
} else if (e.KeyCode == Keys.Home && (e.Modifiers & Keys.Control) != 0) { // Ctrl+Home
sftTree1.EditNavigate(EditNavigateEnum.Home);
e.Handled = true;
} else if (e.KeyCode == Keys.End && (e.Modifiers & Keys.Control) != 0) { // Ctrl+End
sftTree1.EditNavigate(EditNavigateEnum.End);
e.Handled = true;
} else if (e.KeyCode == Keys.Tab && (e.Modifiers & Keys.Shift) != 0) { // Shift+Tab
sftTree1.EditNavigate(EditNavigateEnum.Left);
e.Handled = true;
} else if (e.KeyCode == Keys.Tab && (e.Modifiers & Keys.Shift) == 0) { // Tab
sftTree1.EditNavigate(EditNavigateEnum.Right);
e.Handled = true;
} else if (e.KeyCode == Keys.Escape) { // ESC
sftTree1.EndEdit(false);
e.Handled = true;
} else if (e.KeyCode == Keys.Return) { // Return
sftTree1.EndEdit(true);
e.Handled = true;
}
}
// Textboxes normally don't want Tab and Escape keys, so we enable these here
private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
if (e.KeyCode == Keys.Tab)
e.IsInputKey = true;
else if (e.KeyCode == Keys.Escape)
e.IsInputKey = true;
}
}
}