---
id: "T:cAlgo.API.MultiSelect"
kind: "class"
namespace: "cAlgo.API"
url: "https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/"
---

> Documentation index for agents: https://help.ctrader.com/ctrader-algo/llms.txt · machine index: https://help.ctrader.com/ctrader-algo/api.json

# MultiSelect (class)

A control that shows list of unique items and allows user to select multiple items from the list

Environments: Desktop supported · CLI not supported · Cloud not supported.

- CLI: Accepted without error but never displayed, so control events such as Click are never raised.
- Cloud: Accepted without error but never displayed, so control events such as Click are never raised.

## Definition

```csharp
public class MultiSelect : Control
```

Available since cAlgo.API 5.6.

## Examples

C#:

```csharp
using cAlgo.API;

namespace cAlgo.Robots
{
    public partial class MultiSelectTest : Robot
    {
        private MultiSelect _multiSelect;

        protected override void OnStart()
        {
            _multiSelect = new MultiSelect();

            if (Styled)
            {
                _multiSelect.BackgroundColor = Color.Red;
                _multiSelect.FontWeight = FontWeight.UltraBold;
                _multiSelect.ForegroundColor = Color.Yellow;
                _multiSelect.FontSize = 40;
                _multiSelect.FontFamily = "Comic Sans MS";
            }

            for (var i = 0; i < 10; i++)
            {
                _multiSelect.AddItem($"Item {i}");
            }

            _multiSelect.SelectedItemsChanged += args => Print($"OnSelectedItemsChanged: {string.Join(", ", _multiSelect.SelectedItems)}");

            var addItemTextBox = new TextBox();

            var addItemButton = new Button() { Text = "Add Item" };

            addItemButton.Click += args =>
            {
                if (string.IsNullOrWhiteSpace(addItemTextBox.Text))
                    return;

                Print($"Add Result of {addItemTextBox.Text}: {_multiSelect.AddItem(addItemTextBox.Text)}");
            };

            var removeItemTextBox = new TextBox();

            var removeItemButton = new Button() { Text = "Remove Item" };

            removeItemButton.Click += args =>
            {
                if (string.IsNullOrWhiteSpace(removeItemTextBox.Text))
                    return;

                Print($"Remove Result of {removeItemTextBox.Text}: {_multiSelect.RemoveItem(removeItemTextBox.Text)}");
            };

            var selectItemTextBox = new TextBox();

            var selectItemButton = new Button() { Text = "Select Item" };

            selectItemButton.Click += args =>
            {
                if (string.IsNullOrWhiteSpace(selectItemTextBox.Text))
                    return;

                Print($"Select Result of {selectItemTextBox.Text}: {_multiSelect.SelectItem(selectItemTextBox.Text)}");
            };

            var unselectItemTextBox = new TextBox();

            var unselectItemButton = new Button() { Text = "Unselect Item" };

            unselectItemButton.Click += args =>
            {
                if (string.IsNullOrWhiteSpace(unselectItemTextBox.Text))
                    return;

                Print($"Unselect Result of {unselectItemTextBox.Text}: {_multiSelect.UnselectItem(unselectItemTextBox.Text)}");
            };

            var selectAllItemsButton = new Button() { Text = "Select All Items" };

            selectAllItemsButton.Click += args =>
            {
                _multiSelect.SelectAllItems();
            };

            var unselectAllItemsButton = new Button() { Text = "Unselect All Items" };

            unselectAllItemsButton.Click += args =>
            {
                _multiSelect.UnselectAllItems();
            };

            var showItemsButton = new Button() { Text = "Show Items" };

            showItemsButton.Click += args => Print($"Items: {string.Join(", ", _multiSelect.Items)}");

            var showSelectedItemsButton = new Button() { Text = "Show Selected Items" };

            showSelectedItemsButton.Click += args => Print($"Selected Items: {string.Join(", ", _multiSelect.SelectedItems)}");

            var panel = new StackPanel() { Orientation = Orientation.Vertical, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };

            panel.AddChild(_multiSelect);
            panel.AddChild(addItemTextBox);
            panel.AddChild(addItemButton);
            panel.AddChild(removeItemTextBox);
            panel.AddChild(removeItemButton);
            panel.AddChild(selectItemTextBox);
            panel.AddChild(selectItemButton);
            panel.AddChild(unselectItemTextBox);
            panel.AddChild(unselectItemButton);
            panel.AddChild(selectAllItemsButton);
            panel.AddChild(unselectAllItemsButton);
            panel.AddChild(showItemsButton);
            panel.AddChild(showSelectedItemsButton);

            Chart.AddControl(panel);
        }
    }
}
```

Python:

```python
import clr

clr.AddReference("cAlgo.API")

# Import cAlgo API types
from cAlgo.API import *
# Import trading wrapper functions
from robot_wrapper import *

class Test():
    def on_add_item_button_clicked(self, args):
        if self.addItemTextBox.Text is None:
            return

        api.Print(f"Add Result of {self.addItemTextBox.Text}: {self.multiSelect.AddItem(self.addItemTextBox.Text)}")

    def on_remove_item_button_clicked(self, args):
        if self.removeItemTextBox.Text is None:
            return

        api.Print(f"Remove Result of {self.removeItemTextBox.Text}: {self.multiSelect.RemoveItem(self.removeItemTextBox.Text)}")

    def on_select_item_button_clicked(self, args):
        if self.selectItemTextBox.Text is None:
            return

        api.Print(f"Select Result of {self.selectItemTextBox.Text}: {self.multiSelect.SelectItem(self.selectItemTextBox.Text)}")

    def on_unselect_item_button_clicked(self, args):
        if self.unselectItemTextBox.Text is None:
            return

        api.Print(f"Unselect Result of {self.unselectItemTextBox.Text}: {self.multiSelect.UnselectItem(self.unselectItemTextBox.Text)}")

    def on_start(self):
        self.multiSelect = MultiSelect()

        if api.Styled:
            self.multiSelect.BackgroundColor = Color.Red
            self.multiSelect.FontWeight = FontWeight.UltraBold
            self.multiSelect.ForegroundColor = Color.Yellow
            self.multiSelect.FontSize = 40
            self.multiSelect.FontFamily = "Comic Sans MS"

        for i in range(10):
            self.multiSelect.AddItem(f"Item {i}")

        self.multiSelect.SelectedItemsChanged += lambda args: api.Print(f"OnSelectedItemsChanged: {', '.join(self.multiSelect.SelectedItems)}")

        self.addItemTextBox = TextBox()

        addItemButton = Button()
        addItemButton.Text = "Add Item"
        addItemButton.Click += self.on_add_item_button_clicked

        self.removeItemTextBox = TextBox()

        removeItemButton = Button()
        removeItemButton.Text = "Remove Item"
        removeItemButton.Click += self.on_remove_item_button_clicked

        self.selectItemTextBox = TextBox()

        selectItemButton = Button()
        selectItemButton.Text = "Select Item"
        selectItemButton.Click += self.on_select_item_button_clicked

        self.unselectItemTextBox = TextBox()

        unselectItemButton = Button()
        unselectItemButton.Text = "Unselect Item"
        unselectItemButton.Click += self.on_unselect_item_button_clicked

        selectAllItemsButton = Button()
        selectAllItemsButton.Text = "Select All Items"
        selectAllItemsButton.Click += lambda _: self.multiSelect.SelectAllItems()

        unselectAllItemsButton = Button()
        unselectAllItemsButton.Text = "Unselect All Items"
        unselectAllItemsButton.Click += lambda _: self.multiSelect.UnselectAllItems()

        showItemsButton = Button()
        showItemsButton.Text = "Show Items"
        showItemsButton.Click += lambda _: api.Print(f"Items: {', '.join(self.multiSelect.Items)}")

        showSelectedItemsButton = Button()
        showSelectedItemsButton.Text = "Show Selected Items"
        showSelectedItemsButton.Click += lambda _: api.Print(f"Selected Items: {', '.join(self.multiSelect.SelectedItems)}")

        panel = StackPanel()
        panel.Orientation = Orientation.Vertical
        panel.HorizontalAlignment = HorizontalAlignment.Center
        panel.VerticalAlignment = VerticalAlignment.Center

        panel.AddChild(self.multiSelect)
        panel.AddChild(self.addItemTextBox)
        panel.AddChild(addItemButton)
        panel.AddChild(self.removeItemTextBox)
        panel.AddChild(removeItemButton)
        panel.AddChild(self.selectItemTextBox)
        panel.AddChild(selectItemButton)
        panel.AddChild(self.unselectItemTextBox)
        panel.AddChild(unselectItemButton)
        panel.AddChild(selectAllItemsButton)
        panel.AddChild(unselectAllItemsButton)
        panel.AddChild(showItemsButton)
        panel.AddChild(showSelectedItemsButton)

        api.Chart.AddControl(panel)
```

config.json:

```json
{
  "AccessRights": "None",
  "AddIndicators": true,
  "Parameters": [
    {
      "Name": "Styled",
      "Type": "Boolean",
      "DefaultValue": false
    }
  ]
}
```

## Constructors

- `public MultiSelect()` — Creates a new empty MultiSelect with default MultiSelect Style [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/Constructor/index.md)

## Methods

- `public bool AddItem(string item)` — Adds a new item to the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/AddItem/index.md)
- `public bool RemoveItem(string item)` — Removes an existing item from the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/RemoveItem/index.md)
- `public void SelectAllItems()` — Selects all items on the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/SelectAllItems/index.md)
- `public bool SelectItem(string item)` — Selects item on the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/SelectItem/index.md)
- `public void SelectItems(IEnumerable<string> items)` — Selects items on the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/SelectItems/index.md)
- `public void UnselectAllItems()` — Unselects all items on the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/UnselectAllItems/index.md)
- `public bool UnselectItem(string item)` — Unselects item on the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/UnselectItem/index.md)
- `public void UnselectItems(IEnumerable<string> items)` — Unselects items on the MultiSelect [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/UnselectItems/index.md)

## Properties

- `public IReadonlyList<string> Items {get;}` — Get the read-only copy of MultiSelect items [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/Items/index.md)
- `public IReadonlyList<string> SelectedItems {get;}` — Get the read-only copy of MultiSelect selected items [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/SelectedItems/index.md)

## Events

- `public event Action<MultiSelectSelectedItemsChangedEventArgs> SelectedItemsChanged;` — This event will trigger if the MultiSelect selected items changed [details](https://help.ctrader.com/ctrader-algo/references/Controls/MultiSelect/SelectedItemsChanged/index.md)

## Inherited members

- `public Color ForegroundColor {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/ForegroundColor/index.md)
- `public Color BackgroundColor {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/BackgroundColor/index.md)
- `public Thickness Padding {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/Padding/index.md)
- `public VerticalAlignment VerticalContentAlignment {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/VerticalContentAlignment/index.md)
- `public HorizontalAlignment HorizontalContentAlignment {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/HorizontalContentAlignment/index.md)
- `public FontWeight FontWeight {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/FontWeight/index.md)
- `public FontStyle FontStyle {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/FontStyle/index.md)
- `public string FontFamily {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/FontFamily/index.md)
- `public double FontSize {get; set;}` (from Control) [details](https://help.ctrader.com/ctrader-algo/references/Controls/Control/FontSize/index.md)
- `public void ResetProperty(ControlProperty property)` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/ResetProperty/index.md)
- `public Guid UniqueId {get;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/UniqueId/index.md)
- `public Style Style {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Style/index.md)
- `public double Left {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Left/index.md)
- `public double Top {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Top/index.md)
- `public double Right {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Right/index.md)
- `public double Bottom {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Bottom/index.md)
- `public double Width {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Width/index.md)
- `public double Height {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Height/index.md)
- `public double MinWidth {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/MinWidth/index.md)
- `public double MinHeight {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/MinHeight/index.md)
- `public double MaxWidth {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/MaxWidth/index.md)
- `public double MaxHeight {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/MaxHeight/index.md)
- `public bool IsEnabled {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/IsEnabled/index.md)
- `public bool IsVisible {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/IsVisible/index.md)
- `public double Opacity {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Opacity/index.md)
- `public Thickness Margin {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Margin/index.md)
- `public VerticalAlignment VerticalAlignment {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/VerticalAlignment/index.md)
- `public HorizontalAlignment HorizontalAlignment {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/HorizontalAlignment/index.md)
- `public Dock Dock {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/Dock/index.md)
- `public bool IsHitTestVisible {get; set;}` (from ControlBase) [details](https://help.ctrader.com/ctrader-algo/references/Controls/ControlBase/IsHitTestVisible/index.md)

