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 illustrates cell editing using edit controls and combo boxes, cell navigation, uneditable cells, checkbox cell image.
The source code is located at C:\Program Files (x86)\Softelvdm\SftTree OCX 7.5\Samples\Visual Studio - CSharp\CellEditing\Form1.cs or C:\Program Files\Softelvdm\SftTree OCX 7.5\Samples\Visual Studio - CSharp\CellEditing\Form1.cs (on 32-bit Windows versions).
private void Command1_Click(object sender, System.EventArgs e) {
Application.Exit();
}
private void Form1_Load(object sender, System.EventArgs e) {
int ItemIndex;
ItemIndex = axSftTree1.Items.Add("Click on a cell to edit");
axSftTree1.get_Cell(ItemIndex, 1).Text = "Use Tab/Return keys";
axSftTree1.get_Cell(ItemIndex, 2).Text = "Use arrow keys";
ItemIndex = axSftTree1.Items.Add("This sample supports cell navigation");
axSftTree1.get_Cell(ItemIndex, 1).Text = "Ctrl+Home and Ctrl+End";
int i;
SftTreeItem Item;
SftTreeCell Cell;
for (i = 1 ; i < 50 ; ++i) {
ItemIndex = axSftTree1.Items.Add("An item");
axSftTree1.get_Cell(ItemIndex, 1).Text = "2nd Column";
axSftTree1.get_Cell(ItemIndex, 2).Text = "3rd Column";
ItemIndex = axSftTree1.Items.Add("Another item");
Item = axSftTree1.get_Item(ItemIndex);
Item.Level = 1;
Item.get_Cell(1).Text = "2nd Column";
Item.get_Cell(2).Text = "3rd Column";
ItemIndex = axSftTree1.Items.Add("This item can't be edited");
Item = axSftTree1.get_Item(ItemIndex);
Item.Level = 2;
Item.EditIgnore = true;
Item.get_Cell(0).Image.Appearance = SftPictureImageConstants.sftImageCheckboxYes;
Item.get_Cell(1).Text = "2nd Column (can't edit this item)";
Item.get_Cell(2).Text = "3rd Column (can't edit this item)";
ItemIndex = axSftTree1.Items.Add("A fourth item");
Item = axSftTree1.get_Item(ItemIndex);
Item.Level = 1;
Cell = axSftTree1.get_Cell(ItemIndex, 1);
Cell.Text = "This cell can't be edited";
Cell.EditIgnore = true;
Cell.Image.Appearance = SftPictureImageConstants.sftImageCheckboxYes;
axSftTree1.get_Cell(ItemIndex, 2).Text = "3rd Column";
}
axSftTree1.ColumnsObj.MakeOptimal();
axSftTree1.RowHeaders.MakeOptimal();
axSftTree1.Items.RecalcHorizontalExtent();
}
private void axSftTree1_ItemClick(object sender, AxSftTreeLib75._DSftTreeEvents_ItemClickEvent e) {
SftPictureObject Img;
SftTreeAreaTypeConstants area = (SftTreeAreaTypeConstants) e.areaType;
if (area == SftTreeAreaTypeConstants.constSftTreeCellText)
// User clicked on a cell
axSftTree1.get_Cell(e.itemIndex, e.colIndex).Edit(0, 0);
else if (area == SftTreeAreaTypeConstants.constSftTreeCellGraphic) {
// check if check box - toggle
Img = axSftTree1.get_Cell(e.itemIndex, e.colIndex).Image;
if (Img.Appearance == SftPictureImageConstants.sftImageCheckboxNo)
Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes;
else if (Img.Appearance == SftPictureImageConstants.sftImageCheckboxYes)
Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo;
}
}
private void axSftTree1_ItemDblClick(object sender, AxSftTreeLib75._DSftTreeEvents_ItemDblClickEvent e) {
SftPictureObject Img;
SftTreeAreaTypeConstants area = (SftTreeAreaTypeConstants) e.areaType;
if (area == SftTreeAreaTypeConstants.constSftTreeColumnRes)
axSftTree1.get_Column(e.colIndex).MakeOptimal();
else if (area == SftTreeAreaTypeConstants.constSftTreeCellGraphic) {
// check if check box - toggle
Img = axSftTree1.get_Cell(e.itemIndex, e.colIndex).Image;
if (Img.Appearance == SftPictureImageConstants.sftImageCheckboxNo)
Img.Appearance = SftPictureImageConstants.sftImageCheckboxYes;
else if (Img.Appearance == SftPictureImageConstants.sftImageCheckboxYes)
Img.Appearance = SftPictureImageConstants.sftImageCheckboxNo;
}
}
private void axSftTree1_ToolTipVScroll(object sender, AxSftTreeLib75._DSftTreeEvents_ToolTipVScrollEvent e) {
e.text = "Item " + e.itemIndex.ToString() + " - " + e.text;
}
private void axSftTree1_EditAllowed(object sender, AxSftTreeLib75._DSftTreeEvents_EditAllowedEvent e) {
// Last chance to suppress cell editing for a cell
//if (e.itemIndex == 1 && e.colIndex == 1)
// e.allowed = false;
}
private void axSftTree1_EditInitializing(object sender, AxSftTreeLib75._DSftTreeEvents_EditInitializingEvent e) {
System.Windows.Forms.Control ctrl;
// Choose a control based on current column being edited
if (e.editCol == 1)
ctrl = Combo1;
else
ctrl = Text1;
// LeftPix/TopPix/WidthPix/HeightPix describes the current cell area
// we need to return the position and size needed for editing.
// In this example, we use the height of the control on the form
// and center it over the cell.
e.topPix = e.topPix + (e.heightPix - ctrl.Height) / 2;
e.heightPix = ctrl.Height;
// Set the text in the control used for cell editing and
// set other control-specific properties
if (ctrl == Text1) {
Text1.Width = 200;
Text1.Text = axSftTree1.get_Cell(e.editIndex, e.editCol).Text;
Text1.SelectionStart = 0;
Text1.SelectionLength = 999;
} else {
Combo1.Items.Clear();
Combo1.Items.Add("Option 1");
Combo1.Items.Add("Option 2");
Combo1.Items.Add("Option 3");
Combo1.Items.Add(axSftTree1.get_Cell(e.editIndex, e.editCol).Text);
Combo1.Text = axSftTree1.get_Cell(e.editIndex, e.editCol).Text;
}
// Return the control's window handle
e.window = (int) ctrl.Handle;
e.vData = ctrl;
// Define navigation keys
// VK_TAB
axSftTree1.CellEditIntercept(9, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar);
// VK_RETURN
axSftTree1.CellEditIntercept(13, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar);
// VK_HOME
axSftTree1.CellEditIntercept(36, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar);
// VK_END
axSftTree1.CellEditIntercept(35, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar);
if (ctrl == Text1) {
// We want these keys just for the edit control.
// VK_UP
axSftTree1.CellEditIntercept(38, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar);
// VK_DOWN
axSftTree1.CellEditIntercept(40, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar | SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar);
}
}
private void axSftTree1_EditInitialized(object sender, AxSftTreeLib75._DSftTreeEvents_EditInitializedEvent e) {
// Show the combo box dropdown portion
if (e.vData == Combo1) {
// We're taking over positioning, so we can drop down the dropdown portion of the control
e.positioned = true;
Combo1.Left = e.leftPix;
Combo1.Top = e.topPix;
Combo1.Width = e.widthPix;
Combo1.Height = e.heightPix;
Combo1.Enabled = true;
Combo1.Visible = true;
Combo1.Focus();
Combo1.DroppedDown = true;
}
}
private void axSftTree1_EditNavigating(object sender, AxSftTreeLib75._DSftTreeEvents_EditNavigatingEvent e) {
// Process key pressed
axSftTree1.EditNavigate(e.key, e.shift);
}
private void axSftTree1_EditValidate(object sender, AxSftTreeLib75._DSftTreeEvents_EditValidateEvent e) {
// Validate the new cell contents
string s;
if (e.vData == Text1)
s = Text1.Text;
else
s = Combo1.Text;
s = s.Trim();
if (s.Length <= 0) {
MessageBox.Show("Just to demonstrate data input validation, this example rejects empty cells. Please enter some data.");
e.inputValid = false;
}
}
private void axSftTree1_EditEnding(object sender, AxSftTreeLib75._DSftTreeEvents_EditEndingEvent e) {
// Save the new cell contents
if (e.saveInput) {
if (e.vData == Text1) {
axSftTree1.get_Cell(e.editIndex, e.editCol).Text = Text1.Text;
} else {
axSftTree1.get_Cell(e.editIndex, e.editCol).Text = Combo1.Text;
}
}
Control ctrl = (Control) e.vData;
ctrl.Visible = false;
ctrl.Enabled = false;
}
}
}