# Tab Management and Navigation

## Overview

The Tab Management and Navigation feature of the SiticoneTabControl allows developers to enable functionalities such as closing tabs, reordering them via drag-and-drop, and switching between tabs using the mouse wheel. These capabilities ensure that the tab interface remains flexible, intuitive, and responsive to user interactions, making it easier to manage large sets of tabs in an application.

***

### Properties Overview

| Property Name             | Description                                                                                                                           | Default Value                      | Data Type             |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | --------------------- |
| EnableMouseWheelTabSwitch | Toggles the ability to switch between tabs using the mouse wheel scrolling.                                                           | true                               | bool                  |
| AllowTabReorder           | Enables drag-and-drop reordering of tabs, allowing users to change their order dynamically.                                           | true                               | bool                  |
| CanCloseTab (Collection)  | Provides a collection to mark specific tabs as closable, enabling users to remove unwanted tabs via the close button or context menu. | false\* (default per tab is false) | CanCloseTabCollection |

\*Note: The default behavior for each individual tab is non-closable unless explicitly set.

***

### Key Points

| Aspect                   | Details                                                                                                                                                   |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| User-Friendly Navigation | Mouse wheel tab switching offers an intuitive method for users to cycle through tabs without having to click directly on them.                            |
| Dynamic Tab Reordering   | Drag-and-drop functionality facilitates the organization of tabs based on user preferences, allowing for a customizable and adaptive interface.           |
| Controlled Tab Closure   | The closable tab collection enables precise control over which tabs can be closed, ensuring that essential tabs remain fixed while others can be removed. |

***

### Best Practices

| Practice                               | Explanation                                                                                                                       | Code Example                                                |
| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
| Enable Interactive Navigation          | Utilize the mouse wheel tab switch for rapid navigation when your application contains a large number of tabs.                    | `tabControl.EnableMouseWheelTabSwitch = true;`              |
| Allow Reordering Only When Appropriate | If your application benefits from a fixed tab order (e.g., a specific workflow), consider disabling tab reordering.               | `tabControl.AllowTabReorder = false;`                       |
| Mark Tabs as Closable Selectively      | Use the `CanCloseTab` collection to designate only non-essential tabs as closable to prevent accidental closure of critical tabs. | `csharp<br>tabControl.CanCloseTab[someTabPage] = true;<br>` |

***

### Common Pitfalls

| Pitfall                              | Explanation                                                                                                        | How to Avoid                                                                                |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| Unintended Tab Closure               | Marking every tab as closable without careful consideration may lead to users accidentally closing important tabs. | Limit closable settings only to tabs that are meant to be temporary.                        |
| Confusing Navigation with Reordering | Enabling both mouse wheel navigation and drag-and-drop reordering without proper visual cues can confuse users.    | Provide clear visual feedback (animations or indicators) when reordering or switching tabs. |
| Overcomplicating the Interface       | Adding too many interactive features may overwhelm users if not well integrated into the application’s design.     | Test the user interface thoroughly to balance functionality with simplicity.                |

***

### Usage Scenarios

| Scenario                                     | Description                                                                                                                           | Sample Code Snippet                                                                              |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| Large-Scale Data Dashboard                   | In a dashboard with many tabs, enable mouse wheel navigation so users can quickly scroll through the tabs without excessive clicking. | `csharp<br>// Enable mouse wheel navigation<br>tabControl.EnableMouseWheelTabSwitch = true;<br>` |
| Customizable Workflow Interface              | Allow users to rearrange tabs to suit their workflow by enabling drag-and-drop reordering.                                            | `csharp<br>// Allow tab reordering<br>tabControl.AllowTabReorder = true;<br>`                    |
| Selective Tab Closure for Non-Critical Views | Mark informational tabs or temporary views as closable so users can dismiss them while keeping essential tabs fixed.                  | `csharp<br>// Mark a tab as closable<br>tabControl.CanCloseTab[someTabPage] = true;<br>`         |

***

### Detailed Code Examples

#### Example 1: Basic Tab Navigation and Management

```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
using SiticoneNetFrameworkUI;

public class TabManagementDemoForm : Form
{
    private SiticoneTabControl tabControl;

    public TabManagementDemoForm()
    {
        InitializeComponents();
    }

    private void InitializeComponents()
    {
        // Initialize the SiticoneTabControl and set navigation properties
        tabControl = new SiticoneTabControl
        {
            Location = new Point(20, 20),
            Size = new Size(800, 400),
            EnableMouseWheelTabSwitch = true,   // Allow switching tabs with the mouse wheel
            AllowTabReorder = true                // Enable drag-and-drop reordering
        };

        // Create and add several tabs
        for (int i = 0; i < 6; i++)
        {
            TabPage page = new TabPage($"Tab {i + 1}");
            // For demonstration, mark even-numbered tabs as closable
            if (i % 2 == 0)
            {
                tabControl.CanCloseTab[page] = true;
            }
            tabControl.TabPages.Add(page);
        }

        // Add the tab control to the form
        this.Controls.Add(tabControl);
        this.Text = "Tab Management and Navigation Demo";
        this.StartPosition = FormStartPosition.CenterScreen;
    }
    
    [STAThread]
    public static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new TabManagementDemoForm());
    }
}
```

#### Example 2: Dynamic Reordering and Runtime Management

```csharp
using System;
using System.Drawing;
using System.Windows.Forms;
using SiticoneNetFrameworkUI;

public class DynamicTabManagementForm : Form
{
    private SiticoneTabControl tabControl;
    private Button toggleReorderButton;
    private bool allowReorder = true;

    public DynamicTabManagementForm()
    {
        InitializeComponents();
    }

    private void InitializeComponents()
    {
        // Initialize the SiticoneTabControl with default navigation features
        tabControl = new SiticoneTabControl
        {
            Dock = DockStyle.Top,
            Height = 250,
            EnableMouseWheelTabSwitch = true,
            AllowTabReorder = true
        };

        // Add sample tabs
        for (int i = 0; i < 4; i++)
        {
            TabPage page = new TabPage($"Page {i + 1}");
            // Mark the first page as non-closable and others as closable
            tabControl.CanCloseTab[page] = i != 0;
            tabControl.TabPages.Add(page);
        }

        // Button to toggle tab reordering at runtime
        toggleReorderButton = new Button
        {
            Text = "Toggle Tab Reordering",
            Dock = DockStyle.Bottom,
            Height = 40
        };
        toggleReorderButton.Click += ToggleReorderButton_Click;

        this.Controls.Add(tabControl);
        this.Controls.Add(toggleReorderButton);
        this.Text = "Dynamic Tab Management Demo";
        this.StartPosition = FormStartPosition.CenterScreen;
    }

    private void ToggleReorderButton_Click(object sender, EventArgs e)
    {
        // Toggle the AllowTabReorder property
        allowReorder = !allowReorder;
        tabControl.AllowTabReorder = allowReorder;
        MessageBox.Show($"Tab reordering is now {(allowReorder ? "enabled" : "disabled")}.", "Reordering Toggled");
        tabControl.Invalidate();
    }

    [STAThread]
    public static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new DynamicTabManagementForm());
    }
}
```

***

### Review

| Aspect                 | Review Comments                                                                                                                        |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Navigation Efficiency  | Mouse wheel switching enables rapid navigation through multiple tabs, especially in data-intensive applications.                       |
| Reordering Flexibility | Drag-and-drop reordering empowers users to personalize their interface, but ensure that it does not conflict with other UI operations. |
| Closure Control        | The closable tabs collection provides a mechanism for selectively enabling closure, which is essential for maintaining critical tabs.  |

***

### Summary

The Tab Management and Navigation feature in the SiticoneTabControl combines the capabilities of mouse wheel navigation, drag-and-drop reordering, and selective tab closure. These functionalities provide a dynamic and responsive tab interface, making it easier for users to manage and navigate through multiple tabs. Developers can fine-tune these properties to match their application's workflow and design, ensuring an intuitive and efficient user experience.

***

### Additional Sections

#### Integration Checklist

| Step                            | Action Required                                                                                                       |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Instantiate the Control         | Create an instance of SiticoneTabControl and add it to your form.                                                     |
| Configure Navigation Properties | Set `EnableMouseWheelTabSwitch` and `AllowTabReorder` according to your application’s navigation requirements.        |
| Designate Closable Tabs         | Use the `CanCloseTab` collection to mark which tabs can be closed by the user.                                        |
| Test Interactions               | Verify that mouse wheel navigation, drag-and-drop reordering, and closure operations function as expected.            |
| Validate Responsiveness         | Ensure that the control remains responsive and that the UI updates correctly when properties are modified at runtime. |

#### Frequently Asked Questions

| Question                                              | Answer                                                                                                                                     |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| How do I prevent a critical tab from being closed?    | Do not mark critical tabs as closable using the `CanCloseTab` collection.                                                                  |
| Can I disable drag-and-drop reordering temporarily?   | Yes, set `AllowTabReorder` to false when reordering is not desired and revert it back to true when needed.                                 |
| What if the mouse wheel navigation is not responsive? | Ensure that `EnableMouseWheelTabSwitch` is set to true and that no conflicting event handlers are interfering with the mouse wheel events. |

***

This comprehensive documentation for the Tab Management and Navigation feature, based solely on the provided code, is designed to guide developers through integrating and customizing these functionalities in their WinForms applications using the SiticoneTabControl.
