---
title: SAIFTabs
summary: API reference for SAIFTabs.
status: draft
owner: SAIF Documentation Team
last_reviewed: 2026-08-17
library: SAIF.Presentation.Web.Controls.V2
reference_type: package
---

# SAIFTabs

`SAIFTabs` is the imperative (code-driven) counterpart to `SAIFTabBar`: consuming pages build the tab list at runtime via `AddTab`/`InsertTab`/`RemoveTab`, and the control raises cancelable selection-change events so host pages can coordinate visibility of tab-associated content panels (`DivID`)*.

## Purpose
- Let host pages build and manage a tab bar entirely in code, rather than declaring tabs in markup (contrast with `SAIFTabBar`).
- Raise a cancelable `BeforeSelectedIndexChanged` event so host pages can veto a tab switch (e.g., due to unsaved-data validation) before `SelectedIndexChanged` commits it.

## Context
- Namespace: `SAIF.Presentation.Web.Controls.V2`
- Assembly/package: Compiled into `SAIF.BOF.Presentation.Web.Infragistics103`*

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `ActiveLinkStyle` | `Public Property ActiveLinkStyle As String` | CSS class applied to the selected tab's link text. |
| `InactiveLinkStyle` | `Public Property InactiveLinkStyle As String` | CSS class applied to unselected tabs' link text. |
| `ActiveTabStyle` | `Public Property ActiveTabStyle As String` | CSS class applied to the selected tab's cell. |
| `InactiveTabStyle` | `Public Property InactiveTabStyle As String` | CSS class applied to unselected tabs' cells. |
| `TabImageLeft` | `Public Property TabImageLeft As String` | Image URL for the left edge decoration of each rendered tab. |
| `TabImageRight` | `Public Property TabImageRight As String` | Image URL for the right edge decoration of each rendered tab. |
| `SelectedTabId` | `Public ReadOnly Property SelectedTabId As String` | The `ClientID` of the currently selected tab. |
| `SelectedTabIndex` | `Public ReadOnly Property SelectedTabIndex As Integer` | The zero-based index of the currently selected tab. |
| `SelectedTabText` | `Public ReadOnly Property SelectedTabText As String` | The display text of the currently selected tab. |
| `SelectedTab` | `Public ReadOnly Property SelectedTab As TabSettings` | The full `TabSettings` model of the currently selected tab. |
| `IsDesign` | `Public ReadOnly Property IsDesign As Boolean` | Indicates whether the control is executing in the Visual Studio designer (used by `SAIFTabsDesigner`). |
| `SelectedIndexChanged` | `Public Event SelectedIndexChanged(ByRef sender As Object, ByRef e As SAIFTabEventArgs)` | Raised after the selected tab has changed (uncanceled). |
| `BeforeSelectedIndexChanged` | `Public Event BeforeSelectedIndexChanged(ByRef sender As Object, ByRef e As SAIFTabEventArgs)` | Raised before committing a tab switch; setting `e.Cancel = True` vetoes the change. |
| `AddTab(inText, inClientID, inDivID, inSelected, inAccessKey, inWidth)` | `Public Sub AddTab(ByVal inText As String, ByVal inClientID As String, ByVal inDivID As String, ByVal inSelected As Boolean, ByVal inAccessKey As String, ByVal inWidth As Unit)` | Appends a new tab with an explicit width, associating it with a content `DivID` that the host page shows/hides on selection. |
| `AddTab(inText, inClientID, inDivID, inSelected, inAccessKey)` | `Public Sub AddTab(ByVal inText As String, ByVal inClientID As String, ByVal inDivID As String, ByVal inSelected As Boolean, ByVal inAccessKey As String)` | Appends a new tab using a default width. |
| `InsertTab(inIndex, inText, inClientID, inDivID, inSelected, inAccessKey)` | `Public Sub InsertTab(ByVal inIndex As Integer, ByVal inText As String, ByVal inClientID As String, ByVal inDivID As String, ByVal inSelected As Boolean, ByVal inAccessKey As String)` | Inserts a new tab at a specific index using a default width. |
| `InsertTab(inIndex, inText, inClientID, inDivID, inSelected, inAccessKey, inWidth)` | `Public Sub InsertTab(ByVal inIndex As Integer, ByVal inText As String, ByVal inClientID As String, ByVal inDivID As String, ByVal inSelected As Boolean, ByVal inAccessKey As String, ByVal inWidth As Unit)` | Inserts a new tab at a specific index with an explicit width. |
| `RemoveTab(inID)` | `Public Sub RemoveTab(ByVal inID As String)` | Removes the tab matching the given tab ID. |
| `RemoveTab(inIndex)` | `Public Sub RemoveTab(ByVal inIndex As Integer)` | Removes the tab at the given index. |
| `SelectTab(inID)` | `Public Sub SelectTab(ByVal inID As String)` | Programmatically selects the tab matching the given ID. |
| `SelectTab(inIndex)` | `Public Sub SelectTab(ByVal inIndex As Integer)` | Programmatically selects the tab at the given index. |
| `HideTab(inID)` | `Public Sub HideTab(ByVal inID As String)` | Hides the tab matching the given ID. |
| `HideTab(inIndex)` | `Public Sub HideTab(ByVal inIndex As Integer)` | Hides the tab at the given index. |
| `ShowTab(inID)` | `Public Sub ShowTab(ByVal inID As String)` | Shows the tab matching the given ID. |
| `ShowTab(inIndex)` | `Public Sub ShowTab(ByVal inIndex As Integer)` | Shows the tab at the given index. |
| `Clear()` | `Public Sub Clear()` | Removes all tabs from the control. |

## Inherited public members

`SAIFTabs` inherits from `Control` (`System.Web.UI`), a framework base class rather than a documented SAIF dependency library.

| Member | Signature | Purpose |
| --- | --- | --- |
| `ClientID` | `Public ReadOnly Property ClientID As String` | Rendered client-side ID used by scripts and generated child controls. |
| `Controls` | `Public ReadOnly Property Controls As ControlCollection` | Child controls collection containing the dynamically generated tab links and layout controls. |
| `EnableViewState` | `Public Property EnableViewState As Boolean` | Controls whether the tab control persists state across postbacks. |
| `ID` | `Public Property ID As String` | Server-side identifier used in naming containers and control lookup. |
| `NamingContainer` | `Public ReadOnly Property NamingContainer As Control` | Parent naming container used to scope child control IDs. |
| `Page` | `Public ReadOnly Property Page As Page` | Owning page used during lifecycle events and script registration. |
| `Parent` | `Public ReadOnly Property Parent As Control` | Immediate containing control in the server control tree. |
| `UniqueID` | `Public ReadOnly Property UniqueID As String` | Fully qualified postback identifier used in form submissions. |
| `Visible` | `Public Property Visible As Boolean` | Determines whether the tab control participates in rendering. |

Standard `Control` members (`ID`, `ClientID`, `Controls`, `Visible`, `DataBind`, `FindControl`, etc.) are not re-documented here as they are unmodified framework behavior**.

## Behavioral notes
- `LinkButtonClick` matches the clicked link's `ClientID` against the tab list, then raises `BeforeSelectedIndexChanged` (cancelable) before `SelectedIndexChanged`, per [Tab selection](../../operations/tab-selection.md).
- Tab data is stored in an internal `ArrayList` of `TabSettings`, not a strongly-typed generic collection*.

## Constraints and usage notes
- Consuming pages must call `AddTab`/`InsertTab` during the page lifecycle before rendering; there is no markup-declarative alternative for this control (contrast with `SAIFTabBar`).
- The `DivID` supplied to `AddTab`/`InsertTab` is not automatically shown/hidden by `SAIFTabs` itself — the host page is responsible for toggling the associated content panel's visibility in response to `SelectedIndexChanged`*.

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- SAIF.Presentation.Web.Controls.V2\SAIFTabs.vb
