Описание combobox c# winforms

233
04 июня 2018, 07:00

Как можно описать comboBox? Например, в описание combobBox написано ФРУКТЫ, а при клике в comboBox показывает название фруктов: яблоко, апельсин, банан, кокос и.т.д.

Answer 1

Простой вариант: использовать свойство Text:

comboBox1.Text = "Выберите фрукт";
comboBox1.Items.AddRange(new object[] {
        "Апельсин",
        "Груша",
        "Банан"});

Для того, чтобы вариант сработал нужно чтобы в DropDownStyle было установлено значение DropDown (значение по-умолчанию).

Answer 2

Добавьте первым в списке название вашего ComboBox, Например === Фрукты ===. И при инициализации формы просто указывайте стартовый индекс 0 для этого элемента. И пока пользователь не нажал на этот элемент ему будет отображаться данное поле. А для правильного выбора значения из списка в обработчик события ItemSelected добавьте игнорирование выбора строки с нулевым индексом, чтобы пользователь не смог щёлкнув по этой строке закрыть выпавший список с перечислением элементов. Это не так сложно. Просто откройте вкладку "события", что рядом с иконкой "свойств" элемента и найдите нужное вам событие. В итоге вы получите то, что желаете. И, не забудьте указать нужное значение в свойстве максимального размера элементов в выпадающем списке. А то получите список со скролом.

Пример моей реализации.

Form1.cs

public partial class Form1 : Form
{
    private int _lastIndex;
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        // Define first time state.
        _lastIndex = 0;
        comboBox1.SelectedIndex = 0;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        // Reset element state.
        comboBox1.SelectedIndex = 0;
        comboBox1.Refresh();
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // Skip action if tries select the label index.
        if (comboBox1.SelectedIndex == 0)
            return;
        _lastIndex = comboBox1.SelectedIndex;
    }
    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        // Restore previous index if new index is 0.
        if (comboBox1.SelectedIndex == 0)
        {
            comboBox1.SelectedIndex = _lastIndex;
            return;
        }
    }
}

Form1.Designer.cs

partial class Form1
{
    /// <summary>
    /// Требуется переменная конструктора.
    /// </summary>
    private System.ComponentModel.IContainer components = null;
    /// <summary>
    /// Освободить все используемые ресурсы.
    /// </summary>
    /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }
    #region Код, автоматически созданный конструктором форм Windows
    /// <summary>
    /// Обязательный метод для поддержки конструктора - не изменяйте
    /// содержимое данного метода при помощи редактора кода.
    /// </summary>
    private void InitializeComponent()
    {
        this.comboBox1 = new System.Windows.Forms.ComboBox();
        this.button1 = new System.Windows.Forms.Button();
        this.SuspendLayout();
        // 
        // comboBox1
        // 
        this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
        this.comboBox1.Items.AddRange(new object[] {
        "=========== Фрукты ===========",
        "Абрикос",
        "Ананас",
        "Апельсин",
        "Виноград",
        "Лимон",
        "Персик",
        "Яблоко"});
        this.comboBox1.Location = new System.Drawing.Point(12, 12);
        this.comboBox1.Name = "comboBox1";
        this.comboBox1.Size = new System.Drawing.Size(196, 21);
        this.comboBox1.TabIndex = 0;
        this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
        this.comboBox1.SelectionChangeCommitted += new System.EventHandler(this.comboBox1_SelectionChangeCommitted);
        // 
        // button1
        // 
        this.button1.Location = new System.Drawing.Point(223, 10);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(75, 23);
        this.button1.TabIndex = 1;
        this.button1.Text = " Reset";
        this.button1.UseVisualStyleBackColor = true;
        this.button1.Click += new System.EventHandler(this.button1_Click);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(310, 49);
        this.Controls.Add(this.button1);
        this.Controls.Add(this.comboBox1);
        this.Name = "Form1";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "Example Form";
        this.Load += new System.EventHandler(this.Form1_Load);
        this.ResumeLayout(false);
    }
    #endregion
    private System.Windows.Forms.ComboBox comboBox1;
    private System.Windows.Forms.Button button1;
}
READ ALSO
Геолокация в C#

Геолокация в C#

Какие есть способы получить долготу и широту устройства в C#? Я пробовал с помощью GeoCoordinateWatcher, но тщетноДелал всё как по книжке, но в итоге...

318
Как обработать событие в webbrowser только 1 раз? - C#

Как обработать событие в webbrowser только 1 раз? - C#

Подскажите пожалуйста как обработать событие только 1 раз? Обрабатывается один раз потому-что при клике на элемент вылазиет еще модальное...

262
Можно ли сделать так,чтобы спрайт отображался поверх объекта либо исчезал со сцены на время их пересечения?

Можно ли сделать так,чтобы спрайт отображался поверх объекта либо исчезал со сцены на время их пересечения?

Проблема состоит в том,что healthBar это UI объект (слайдер) и он перекрывает спрайт летящего самолета

261