using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Softelvdm.SftTabsNET; using Softelvdm.Controls; namespace CloseSample1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } Image imgClose = Bitmap.FromFile("..\\..\\Close1_16x16.png"); Image imgCloseHover = Bitmap.FromFile("..\\..\\Close1Hover_16x16.png"); Image imgNew = Bitmap.FromFile("..\\..\\NewTab1_16x16.png"); private void Form1_Load(object sender, EventArgs e) { // This sample demonstrates how to use a "New Tab" and close buttons in each tab. // The "close button" isn't really a button, instead we use an image. // To prepare for this sample, create a new project with a blank form and add // a SftTabs/NET control named sftTabs1. // In addition, adjust the above FromFile methods to use a (small) bitmap // that is located on your system. sftTabs1.Initializing = true; sftTabs1.FocusHighlightStyle = FocusHighlightStyleEnum.None; sftTabs1.Scrolling.Style = ScrollingStyle.AlwaysLeft; InsertTab("Tab &1", sftTabs1.TabCollection.Count); InsertTab("Tab &2", sftTabs1.TabCollection.Count); // Add "New" tab TabClass tb = sftTabs1.TabCollection.Add(); tb.ToolTip = "Add a new tab"; tb.Image = imgNew; tb.ImagePart.VisibleAppearance = VisibleAppearanceEnum.OwnerHot; tb.ImagePart.PartAlignment = PartAlignmentEnum.Center; // Make the first tab active sftTabs1.Current = 0; // Update button images UpdateCloseButtonImages(); sftTabs1.Switched += new SftTabs.SwitchedEventHandler(sftTabs1_Switched); sftTabs1.Initializing = false; } // we have just switched to a new tab void sftTabs1_Switched(object sender, EventArgs e) { if (sftTabs1.Current == sftTabs1.Count-1) { // We switched to the last tab, which is the "New Tab" tab. Insert a new tab TabClass tbNew = InsertTab("New&" + sftTabs1.Count.ToString(), sftTabs1.Current); sftTabs1.Current = tbNew.Index; // Make it the current tab UpdateCloseButtonImages(); } } // Insert a new tab private TabClass InsertTab(string strLabel, int index) { TabClass tb = sftTabs1.TabCollection.Insert(index); tb.Text = strLabel; tb.ToolTip = strLabel.Replace("&",""); tb.TextPart.PartAlignment = PartAlignmentEnum.Center; tb.TextPart.HAlign = HAlignmentOptionalEnum.Center; tb.Image = imgClose; tb.ImagePart.HoverImage = imgCloseHover; tb.ImagePart.PartAlignment = PartAlignmentEnum.Center; tb.ImagePart.VisibleAppearance = VisibleAppearanceEnum.OwnerSelectedOrHide; tb.ImagePart.Action += new GenericPartClass.ActionEventHandler(ImagePart_Action); return tb; } // The close image of a tab was clicked void ImagePart_Action(object sender, ActionEventArgs e) { TabClass tb = (TabClass) e.Part.PartOwner; int index = tb.Index; sftTabs1.TabCollection.RemoveAt(index); --index; if (index >= 0) sftTabs1.Current = index; UpdateCloseButtonImages(); } // We have to make sure that if there is only one tab, we can't close // that tab. We do that by simply hiding the close button images void UpdateCloseButtonImages() { // If we have more than 2 tabs, we don't need to hide the close button images bool hide = sftTabs1.Count <= 2; foreach (TabClass tb in sftTabs1.TabCollection) { if (tb.ImagePart.Image == imgClose) { // this is a close button image if (hide) tb.ImagePart.VisibleAppearance = VisibleAppearanceEnum.Never; else tb.ImagePart.VisibleAppearance = VisibleAppearanceEnum.OwnerSelectedOrHide; } } } } }