поле со списком в С# не заполняется

У меня есть приложение Windows Forms на С#. Платформа vS 2005.

Ниже приведен фрагмент кода:

namespace HostApp
{
    public partial class Form1 : Form
    {
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {            
            comboBox2.Items.Add("Apples");
            comboBox2.Items.Add("Oranges");
            comboBox2.Items.Add("Grapefruits");
        }
    }
}

Я запускаю приложение, но названия фруктов не отображаются в раскрывающемся списке comboBox2. Я уверен, что мне не хватает какой-то строки кода, чтобы «заполнить» раскрывающийся список введенными значениями. Любая помощь приветствуется.

Спасибо, Вирен


person zack    schedule 24.07.2009    source источник


Ответы (6)


Вы добавляете элементы в обработчик события SelectedIndexChanged. Вам нужно переместить код в InitializeComponent или другое подходящее место.

person Martin Liversage    schedule 24.07.2009
comment
спасибо .. это сработало .. спасибо за быстрый ответ на мой глупый вопрос .. я новичок в С# .. все равно спасибо .. - person zack; 24.07.2009

Пожалуйста, проверьте следующее:

  1. Вы добавили AutoPostBack="true" в поле со списком, чтобы событие selectedChange запускалось и происходила обратная отправка.
  2. Убедитесь, что у вас ничего не изменилось в загрузке страницы, которая обновила поле со списком. Вы можете использовать IsPostBack для загрузки значений.
person Bhaskar    schedule 24.07.2009
comment
Этот вопрос касается Windows Forms, а не ASP.NET. - person Martin Liversage; 24.07.2009

Ваши элементы добавляются при изменении выбранного элемента, но поскольку существующих элементов нет, этого никогда не произойдет. Переместите эти строки в конструктор для Form1, и все заработает.

person Steve Beedie    schedule 24.07.2009

Предоставленный вами код будет добавлять элементы в comboBox2 только тогда, когда выбор изменяется в элементе управления, подключенном к comboBox2_SelectedIndexChanged.

Здесь задействованы две концепции: инициализация управления/привязка данных и обработка событий.

Код, который вы написали, по существу говорит: «Если кто-то выбирает что-то новое в поле со списком, добавьте эти 3 параметра в поле со списком». Это будет происходить каждый раз, когда выбранный индекс изменяется в поле со списком. Это, конечно, предполагает, что вы даже подключили этот обработчик событий к полю со списком для начала. Это обработка событий.

То, что вы, вероятно, пытаетесь сделать, это инициализировать элемент управления. Это происходит, когда вы загружаете страницу и хотите настроить начальные параметры, доступные в элементах управления страницы. Использование события Init или Load, вероятно, является тем местом, где вы хотите настроить выбор в своем элементе управления. Это также когда вы инициализируете свои обработчики событий, чтобы сказать: «Когда что-то произойдет, сделайте это».

person Jay S    schedule 24.07.2009

Переместите код в событие Page_Load...

SelectedIndexChanged срабатывает только тогда, когда индекс ComboBox изменился И AutoPostBack = True.

РЕДАКТИРОВАТЬ: извините, это форма, я думал о сети... перейти к Form_Load

person Martin    schedule 24.07.2009

Людям, испытывающим трудности с автопостбэком и состоянием просмотра, следует остерегаться события page_load.

Если я часто попадал на эту страницу при попытке поиска в Google, поэтому я опубликую ее здесь.

Если вы заполняете свой раскрывающийся список (или любой другой элемент управления) в методе page_load, обязательно напишите дополнительный элемент управления, если есть обратная передача (срабатывает при изменении значения раскрывающегося списка). Если вы не сделаете этот элемент управления, ваши элементы управления будут пополнены.

Мне потребовалось время, чтобы понять эту ошибку. Так что я говорю


protected void Page_Load(object sender, EventArgs e)
{
      

if (!IsPostBack) { //fill your controls here } }

person Terry    schedule 21.12.2009