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 demonstrates how to add the various parts to cells, like checkboxes, images, progressbars, buttons, dropdown buttons, how to handle events and cell orientation.
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;
using Softelvdm.Controls;
namespace WindowsApplication1 {
public partial class PartsSample1 : Form {
public PartsSample1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
sftTree1.Initializing = true;
sftTree1.Columns.Count = 4;
// This sample demonstrates how the various parts of a tree control are used in cells.
// To prepare for this sample, create a new project with a blank form and add
// a SftTree/NET control named sftTree1.
// In addition, adjust the following FromFile method to use a (small) bitmap
// that is located on your system.
Image img = Bitmap.FromFile("..\\..\\test.gif");
// Add an item
ItemClass item = sftTree1.ItemCollection.Add();
// Add a text part to the first cell (could use CellBaseClass.Text instead)
CellClass cell = item.Cells[0];
TextPartClass tp = new TextPartClass("The first cell", LineStyleEnum.Wordwrap, HAlignmentOptionalEnum.Left,
VAlignmentOptionalEnum.Top, Color.Blue, Color.Green, Color.Red, Color.Blue, new Font("Arial", 12), StringFormatFlags.LineLimit| StringFormatFlags.MeasureTrailingSpaces);
cell.Parts.Add(tp);
// Followed by a check box (still in the first cell)
CheckBoxPartClass cb = new CheckBoxPartClass( CheckBoxStateEnum.Unchecked, HAlignmentOptionalEnum.Left, VAlignmentOptionalEnum.Top, true);
cb.Action += new GenericPartClass.ActionEventHandler(cb_Action);
cell.Parts.Add(cb);
// Followed by an image (still in the first cell)
ImagePartClass ip = new ImagePartClass(img);
cell.Parts.Add(ip);
// Add contents to the second cell
item.Cells[1].Text = "The\neasy\nway";
// Add an image to the third cell
cell = item.Cells[2];
cell.Image = img;
ip = (ImagePartClass) cell.Parts[0];
ip.Action += new GenericPartClass.ActionEventHandler(ip_Action);
// Add another item
item = sftTree1.ItemCollection.Add();
// Add a progressbar to the first cell
ProgressBarPartClass pbp = new ProgressBarPartClass(0, 50, 25, 100, 12, GadgetAppearanceEnum.ThemedSystem,
Color.Red, Color.White, System.Drawing.Drawing2D.LinearGradientMode.Vertical);
pbp.PartAlignment = PartAlignmentEnum.EntireArea;
pbp.Appearance = GadgetAppearanceEnum.System;
item.Cells[0].Parts.Add(pbp);
// Add a button to the second cell
ButtonPartClass bp = new ButtonPartClass(false, HAlignmentOptionalEnum.Default, VAlignmentOptionalEnum.Default,
true, false, GadgetAppearanceEnum.ThemedSystem, null, "Click Me", null, Color.Red);
bp.Action += new GenericPartClass.ActionEventHandler(bp_Action);
item.Cells[1].Parts.Add(bp);
// Add text to the third cell
cell = item.Cells[2];
cell.Text = "Sample Text";
// Add a dropdown button (still in the third cell)
DropDownButtonPartClass ddp = new DropDownButtonPartClass();
ddp.Action += new GenericPartClass.ActionEventHandler(ddp_Action);
ddp.PartAlignment = PartAlignmentEnum.FlushEnd;
cell.Parts.Add(ddp);
// Add another item
item = sftTree1.ItemCollection.Add();
// Add three parts with a vertical orientation to the first cell
cell = item.Cells[0];
cell.Orientation = OrientationOptionalEnum.Vertical;
tp = new TextPartClass("First part");
tp.HAlign = HAlignmentOptionalEnum.Left;
cell.Parts.Add(tp);
ip = new ImagePartClass(img);
ip.HAlign = HAlignmentOptionalEnum.Center;
cell.Parts.Add(ip);
tp = new TextPartClass("Third part");
tp.HAlign = HAlignmentOptionalEnum.Right;
cell.Parts.Add(tp);
// Add three parts with a vertical orientation to the second cell
cell = item.Cells[1];
cell.Orientation = OrientationOptionalEnum.Vertical;
tp = new TextPartClass("First part");
tp.HAlign = HAlignmentOptionalEnum.Center;
cell.Parts.Add(tp);
ip = new ImagePartClass(img);
ip.HAlign = HAlignmentOptionalEnum.Center;
cell.Parts.Add(ip);
tp = new TextPartClass("Third part");
tp.HAlign = HAlignmentOptionalEnum.Center;
cell.Parts.Add(tp);
// Add three parts with a vertical orientation to the third cell
cell = item.Cells[2];
cell.Orientation = OrientationOptionalEnum.Vertical;
tp = new TextPartClass("First part");
tp.HAlign = HAlignmentOptionalEnum.Right;
cell.Parts.Add(tp);
ip = new ImagePartClass(img);
ip.HAlign = HAlignmentOptionalEnum.Center;
cell.Parts.Add(ip);
tp = new TextPartClass("Third part");
tp.HAlign = HAlignmentOptionalEnum.Left;
cell.Parts.Add(tp);
// Set a sorting indicator in the first column header
cell = sftTree1.Headers[0,0];
cell.SortIndicatorPosition = SortIndicatorPositionEnum.Side;
cell.SortStatus = SortStatusEnum.Ascending;
sftTree1.Columns.MakeOptimal(0, false);
sftTree1.RecalcHorizontalExtent();
sftTree1.Initializing = false;
}
// Dropdown button Action event
void ddp_Action(object sender, ActionEventArgs e) {
DropDownButtonPartClass ddp = (DropDownButtonPartClass)e.Part;
MessageBox.Show("Dropdown button clicked.");
}
// Button part Action event
void bp_Action(object sender, ActionEventArgs e) {
// this is our button that was just clicked
ButtonPartClass bp = (ButtonPartClass)e.Part;
// this is the cell containing the button
CellClass cell = (CellClass)bp.PartOwner;
// get the previous cell
cell = cell.Previous;
// this cell's first (and only) part is a progressbar (in this example)
ProgressBarPartClass pbp = (ProgressBarPartClass) cell.Parts[0];
// increment the progressbar's Value property
int val;
if (pbp.Value == pbp.Max)
val = 0;
else
val = pbp.Value + 10;
val = Math.Min(val, pbp.Max);
pbp.Value = val;
}
// Checkbox part Action event
void cb_Action(object sender, ActionEventArgs e) {
MessageBox.Show("Clicked the checkbox.");
}
// Image part Action event
void ip_Action(object sender, ActionEventArgs e) {
MessageBox.Show("Clicked the image.");
}
// ItemClick event
private void sftTree1_ItemClick(object sender, ItemClickEventArgs e) {
Debug.Write("** ItemClick");
DumpValues(e);
}
// This is a small helper routine to show all properties and fields of an object
private void DumpValues(object o) {
PropertyInfo[] api = o.GetType().GetProperties();
foreach (PropertyInfo pi in api)
Debug.Write(" " + pi.Name + " " + pi.GetValue(o, new object[] ));
FieldInfo[] afi = o.GetType().GetFields();
foreach (FieldInfo fi in afi)
Debug.Write(" " + fi.Name + " " + fi.GetValue(o));
Debug.WriteLine("");
}
}
}