Esta documentación está archivada y no tiene mantenimiento.

ComboBox (Clase)

Actualización: noviembre 2007

Representa un control de cuadro combinado de Windows.

Espacio de nombres:  System.Windows.Forms
Ensamblado:  System.Windows.Forms (en System.Windows.Forms.dll)

[ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)]
[DefaultBindingPropertyAttribute("Text")]
[ComVisibleAttribute(true)]
public class ComboBox : ListControl
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch) */
/** @attribute DefaultBindingPropertyAttribute("Text") */
/** @attribute ComVisibleAttribute(true) */
public class ComboBox extends ListControl
public class ComboBox extends ListControl

Un ComboBox muestra un campo de edición de cuadro de texto combinado con un ListBox y permite al usuario seleccionar elementos de la lista o escribir texto nuevo. El comportamiento predeterminado de ComboBox es mostrar un campo de edición con una lista desplegable oculta. La propiedad DropDownStyle determina el estilo que mostrará el cuadro combinado. Puede escribir un valor que proporcione una lista desplegable sencilla, en que la lista se muestra siempre; un cuadro de lista desplegable, en que la parte de texto no se puede editar y es necesario presionar una flecha para ver el cuadro de lista desplegable; o el cuadro de lista desplegable predeterminado, en que la parte de texto se puede editar y el usuario debe presionar la tecla de flecha para ver la lista. Para que se muestre una lista que el usuario no puede editar, use un control ListBox.

Para agregar objetos a la lista en tiempo de ejecución, asigne una matriz de referencias a objetos con el método AddRange. De este modo la lista muestra el valor de cadena predeterminado para cada objeto. Puede agregar objetos individuales con el método Add.

Además de la funcionalidad de presentación y selección, ComboBox también proporciona características que permiten agregar de manera eficaz elementos al control ComboBox y buscar texto en los elementos de la lista. Con los métodos BeginUpdate y EndUpdate puede agregar un gran número de elementos al ComboBox sin que el control se tenga que volver a dibujar cada vez que se agrega un elemento a la lista. Los métodos FindString y FindStringExact permiten buscar un elemento de la lista que contenga una cadena de búsqueda específica.

Estas propiedades se pueden usar para administrar el elemento de la lista seleccionado actualmente, la propiedad Text para especificar la cadena que se muestra en el campo de edición, la propiedad SelectedIndex para obtener o establecer el elemento actual y la propiedad SelectedItem para obtener o establecer una referencia al objeto.

t14e0ws8.alert_note(es-es,VS.90).gifNota:

Si tiene un ListBox, ComboBox o CheckedListBox en una página con formularios Windows Forms de base y desea modificar las colecciones de cadenas de esos controles en un formulario derivado, las colecciones de cadenas de estos controles del formulario base deben estar vacías. Si las colecciones de cadenas no están vacías, se establecen como de sólo lectura cuando se deriva otro formulario.

En el ejemplo siguiente se muestra una aplicación completa que ilustra cómo se puede usar el método Add para agregar elementos a un ComboBox, el método FindString para buscar elementos en un ComboBox y los métodos BeginUpdate y EndUpdate para agregar un gran número de elementos a un ComboBox de forma eficaz.

using System;
using System.Windows.Forms;

namespace Win32Form1Namespace {


    public class Win32Form1 : System.Windows.Forms.Form {
        private System.Windows.Forms.Button addButton;
        private System.Windows.Forms.TextBox textBox2;
        private System.Windows.Forms.Button addGrandButton;
        private System.Windows.Forms.ComboBox comboBox1;
        private System.Windows.Forms.Button showSelectedButton;
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Button findButton;
        private System.Windows.Forms.Label label1;

        public Win32Form1() {
            this.InitializeComponent();
        }

        [System.STAThreadAttribute()]
        public static void Main() {
            System.Windows.Forms.Application.Run(new Win32Form1());
        }

        private void InitializeComponent() {
            this.addButton = new System.Windows.Forms.Button();
            this.textBox2 = new System.Windows.Forms.TextBox();
            this.addGrandButton = new System.Windows.Forms.Button();
            this.comboBox1 = new System.Windows.Forms.ComboBox();
            this.showSelectedButton = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.findButton = new System.Windows.Forms.Button();
            this.label1 = new System.Windows.Forms.Label();
            this.addButton.Location = new System.Drawing.Point(248, 32);
            this.addButton.Size = new System.Drawing.Size(40, 24);
            this.addButton.TabIndex = 1;
            this.addButton.Text = "Add";
            this.addButton.Click += new System.EventHandler(this.addButton_Click);
            this.textBox2.Location = new System.Drawing.Point(8, 64);
            this.textBox2.Size = new System.Drawing.Size(232, 20);
            this.textBox2.TabIndex = 6;
            this.textBox2.Text = "";
            this.addGrandButton.Location = new System.Drawing.Point(8, 96);
            this.addGrandButton.Size = new System.Drawing.Size(280, 23);
            this.addGrandButton.TabIndex = 2;
            this.addGrandButton.Text = "Add 1,000 Items";
            this.addGrandButton.Click += new System.EventHandler(this.addGrandButton_Click);
            this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
                        | System.Windows.Forms.AnchorStyles.Right);
            this.comboBox1.DropDownWidth = 280;
            this.comboBox1.Items.AddRange(new object[] {"Item 1",
                        "Item 2",
                        "Item 3",
                        "Item 4",
                        "Item 5"});
            this.comboBox1.Location = new System.Drawing.Point(8, 248);
            this.comboBox1.Size = new System.Drawing.Size(280, 21);
            this.comboBox1.TabIndex = 7;
            this.showSelectedButton.Location = new System.Drawing.Point(8, 128);
            this.showSelectedButton.Size = new System.Drawing.Size(280, 24);
            this.showSelectedButton.TabIndex = 4;
            this.showSelectedButton.Text = "What Item is Selected?";
            this.showSelectedButton.Click += new System.EventHandler(this.showSelectedButton_Click);
            this.textBox1.Location = new System.Drawing.Point(8, 32);
            this.textBox1.Size = new System.Drawing.Size(232, 20);
            this.textBox1.TabIndex = 5;
            this.textBox1.Text = "";
            this.findButton.Location = new System.Drawing.Point(248, 64);
            this.findButton.Size = new System.Drawing.Size(40, 24);
            this.findButton.TabIndex = 3;
            this.findButton.Text = "Find";
            this.findButton.Click += new System.EventHandler(this.findButton_Click);
            this.label1.Location = new System.Drawing.Point(8, 224);
            this.label1.Size = new System.Drawing.Size(144, 23);
            this.label1.TabIndex = 0;
            this.label1.Text = "Test ComboBox";
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {this.comboBox1,
                        this.textBox2,
                        this.textBox1,
                        this.showSelectedButton,
                        this.findButton,
                        this.addGrandButton,
                        this.addButton,
                        this.label1});
            this.Text = "ComboBox Sample";
        }

        private void addButton_Click(object sender, System.EventArgs e) {
           comboBox1.Items.Add(textBox1.Text);
        }

        private void addGrandButton_Click(object sender, System.EventArgs e) {
            comboBox1.BeginUpdate();
            for (int i = 0; i < 1000; i++) {
                comboBox1.Items.Add("Item 1" + i.ToString());
            }
            comboBox1.EndUpdate();
        }

        private void findButton_Click(object sender, System.EventArgs e) {
            int index = comboBox1.FindString(textBox2.Text);
            comboBox1.SelectedIndex = index;
        }

        private void showSelectedButton_Click(object sender, System.EventArgs e) {
            int selectedIndex = comboBox1.SelectedIndex;
            Object selectedItem = comboBox1.SelectedItem;

            MessageBox.Show("Selected Item Text: " + selectedItem.ToString() + "\n" +
                            "Index: " + selectedIndex.ToString());
        }
    }
}


package Win32Form1Namespace;

import System.*;
import System.Windows.Forms.*;

public class Win32Form1 extends System.Windows.Forms.Form
{
    private System.Windows.Forms.Button addButton;
    private System.Windows.Forms.TextBox textBox2;
    private System.Windows.Forms.Button addGrandButton;
    private System.Windows.Forms.ComboBox comboBox1;
    private System.Windows.Forms.Button showSelectedButton;
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.Button findButton;
    private System.Windows.Forms.Label label1;

    public Win32Form1()
    {
        this.InitializeComponent();
    } //Win32Form1

    /** @attribute System.STAThreadAttribute()
     */
    public static void main(String[] args)
    {
        System.Windows.Forms.Application.Run(new Win32Form1());
    } //main

    private void InitializeComponent()
    {
        this.addButton = new System.Windows.Forms.Button();
        this.textBox2 = new System.Windows.Forms.TextBox();
        this.addGrandButton = new System.Windows.Forms.Button();
        this.comboBox1 = new System.Windows.Forms.ComboBox();
        this.showSelectedButton = new System.Windows.Forms.Button();
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.findButton = new System.Windows.Forms.Button();
        this.label1 = new System.Windows.Forms.Label();
        this.addButton.set_Location(new System.Drawing.Point(248, 32));
        this.addButton.set_Size(new System.Drawing.Size(40, 24));
        this.addButton.set_TabIndex(1);
        this.addButton.set_Text("Add");
        this.addButton.add_Click(new System.EventHandler(this.addButton_Click));
        this.textBox2.set_Location(new System.Drawing.Point(8, 64));
        this.textBox2.set_Size(new System.Drawing.Size(232, 20));
        this.textBox2.set_TabIndex(6);
        this.textBox2.set_Text("");
        this.addGrandButton.set_Location(new System.Drawing.Point(8, 96));
        this.addGrandButton.set_Size(new System.Drawing.Size(280, 23));
        this.addGrandButton.set_TabIndex(2);
        this.addGrandButton.set_Text("Add 1,000 Items");
        this.addGrandButton.add_Click(new System.EventHandler(
            this.addGrandButton_Click));
        this.comboBox1.set_Anchor(System.Windows.Forms.AnchorStyles.Bottom
            | System.Windows.Forms.AnchorStyles.Left
            | System.Windows.Forms.AnchorStyles.Right);
        this.comboBox1.set_DropDownWidth(280);
        this.comboBox1.get_Items().AddRange(new Object[] 
            { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" });
        this.comboBox1.set_Location(new System.Drawing.Point(8, 248));
        this.comboBox1.set_Size(new System.Drawing.Size(280, 21));
        this.comboBox1.set_TabIndex(7);
        this.showSelectedButton.set_Location(new System.Drawing.Point(8, 128));
        this.showSelectedButton.set_Size(new System.Drawing.Size(280, 24));
        this.showSelectedButton.set_TabIndex(4);
        this.showSelectedButton.set_Text("What Item is Selected?");
        this.showSelectedButton.add_Click(new System.EventHandler(
            this.showSelectedButton_Click));
        this.textBox1.set_Location(new System.Drawing.Point(8, 32));
        this.textBox1.set_Size(new System.Drawing.Size(232, 20));
        this.textBox1.set_TabIndex(5);
        this.textBox1.set_Text("");
        this.findButton.set_Location(new System.Drawing.Point(248, 64));
        this.findButton.set_Size(new System.Drawing.Size(40, 24));
        this.findButton.set_TabIndex(3);
        this.findButton.set_Text("Find");
        this.findButton.add_Click(new System.EventHandler(
            this.findButton_Click));
        this.label1.set_Location(new System.Drawing.Point(8, 224));
        this.label1.set_Size(new System.Drawing.Size(144, 23));
        this.label1.set_TabIndex(0);
        this.label1.set_Text("Test ComboBox");
        this.set_ClientSize(new System.Drawing.Size(292, 273));
        this.get_Controls().AddRange(new System.Windows.Forms.Control[]
            { this.comboBox1, this.textBox2, this.textBox1,
            this.showSelectedButton, this.findButton, this.addGrandButton,
            this.addButton, this.label1 });
        this.set_Text("ComboBox Sample");
    } //InitializeComponent

    private void addButton_Click(Object sender, System.EventArgs e)
    {
        comboBox1.get_Items().Add(textBox1.get_Text());
    } //addButton_Click

    private void addGrandButton_Click(Object sender, System.EventArgs e)
    {
        comboBox1.BeginUpdate();
        for (int i = 0; i < 1000; i++) {
            comboBox1.get_Items().Add("Item 1" + ((Int32)i).ToString());
        }
        comboBox1.EndUpdate();
    } //addGrandButton_Click

    private void findButton_Click(Object sender, System.EventArgs e)
    {
        int index = comboBox1.FindString(textBox2.get_Text());
        comboBox1.set_SelectedIndex(index);
    } //findButton_Click

    private void showSelectedButton_Click(Object sender, System.EventArgs e)
    {
        int selectedIndex = comboBox1.get_SelectedIndex();
        Object selectedItem = comboBox1.get_SelectedItem();
        MessageBox.Show("Selected Item Text: " + selectedItem.ToString() 
            + "\n" + "Index: " + ((Int32)selectedIndex).ToString());
    } //showSelectedButton_Click


En el siguiente ejemplo de código se utilizan ToolStripControlHost y ComboBox para mostrar un objeto ToolStripDropDown como TreeView.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;

public class Form1 : Form
{
    public Form1()
    {
        MyTreeViewCombo treeCombo = new MyTreeViewCombo();
        treeCombo.TreeView.Nodes.Add("one");
        treeCombo.TreeView.Nodes.Add("two");
        treeCombo.TreeView.Nodes.Add("three");
        this.Controls.Add(treeCombo);
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    [SecurityPermissionAttribute(
        SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
    public class MyTreeViewCombo : ComboBox
    {   
        ToolStripControlHost treeViewHost;
        ToolStripDropDown dropDown;
        public MyTreeViewCombo()
        {
            TreeView treeView = new TreeView();
            treeView.BorderStyle = BorderStyle.None;
            treeViewHost = new ToolStripControlHost(treeView);
            dropDown = new ToolStripDropDown();
            dropDown.Items.Add(treeViewHost);
        }

        public TreeView TreeView
        {
            get { return treeViewHost.Control as TreeView; }
        }

        private void ShowDropDown()
        {
            if (dropDown != null)
            {
                treeViewHost.Width = DropDownWidth;
                treeViewHost.Height = DropDownHeight;
                dropDown.Show(this, 0, this.Height);
            }
        }

        private const int WM_USER = 0x0400,
                          WM_REFLECT = WM_USER + 0x1C00,
                          WM_COMMAND = 0x0111,
                          CBN_DROPDOWN = 7;

        public static int HIWORD(int n)
        {
            return (n >> 16) & 0xffff;
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == (WM_REFLECT + WM_COMMAND))
            {
                if (HIWORD((int)m.WParam) == CBN_DROPDOWN)
                {
                    ShowDropDown();
                    return;
                }
            }
            base.WndProc(ref m);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (dropDown != null)
                {
                    dropDown.Dispose();
                    dropDown = null;
                }
            }
            base.Dispose(disposing);
        }
    }
}


Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0
Mostrar: