Перейти к содержимому

Фото
- - - - -

C# Combobox


  • Вы не можете создать новую тему
  • Please log in to reply
1 ответов в этой теме

#1 Jabadabadun

Jabadabadun
  • Новобранец
  • 9 сообщений

Отправлено 30 Ноябрь 2009 - 20:07

Привет, возникла проблема с наследуемым от Combobox классом.

Хотел написать комбобокс, который по умолчанию содержит в элементах время, получилось следующее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Project {
	class HourComboBox : ComboBox {
		private const int HOURS = 24;
		public HourComboBox() {
			IntegralHeight = false;
			for (int i = 0; i < HOURS; i++) {
				Items.Add(i);
			}
			Console.WriteLine("Size = {0}", Items.Count);
		}
	}
}

В результате после компиляции добавляется новый компонент в панеле инструментов, но после добавления на форму значения в нём дублируются, т.е. в этом комбобоксе выводит:

0
1
2
...
23
0
1
2
...
23

Скриншот: http://pic.ipicture..../2VeW2UnvZ5.jpg

Причём в файле дизайнера формы сгенерировался один цикл:
this.hourComboBox1 .Items.AddRange(new object[] {
			0,
			1,
			2,
			3,
			4,
			5,
			6,
			7,
			8,
			9,
			10,
			11,
			12,
			13,
			14,
			15,
			16,
			17,
			18,
			19,
			20,
			21,
			22,
			23});

Использую Visual Studio 2008, делаю следующее:

1) Создаю Windows Form приложение
2) Создаю новый класс и добавляю в него тот код, который я привёл выше
3) Компилю, открывается пустая форма, после чего в панеле инструментов появляется этот новый элемент
4) Добавляю его на форму и снова запускаю приложение

Причём после этого беру и в свойствах этого элемента добавляю вручную в поле Items какие-нибудь значения, теперь уже выводит этот цикл 1 раз:
0
1
2
...
23
+ дальше те, что ввёл вручную

После этого если удалить те, что ввёл вручную и запустить заново, то повторов не будет.

Однако если добавить на форму второй элемент этого класса, то история повторяется - в первом всё нормально, а в новом опять 2 раза...

Кто-нибудь в состоянии объяснить почему выводит 2 раза данные и как это исправить ?

Спасибо!
  • 0

#2 Warvick

Warvick
  • Пользователь
  • 411 сообщений
  • Откуда:Tallinn

Отправлено 30 Ноябрь 2009 - 20:36

1 цикл - это то. что сгенерила студия.
а 2й - то что у тебя в конструкторе написано :)

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

обойти можно 2мя путями -
1) наследуй не от combobox, а от usercontrol, в который включай свой комбобокс, выдавай наружу нужные св-ва и методы
2)каждый раз кидай на форму обычный комбобокс, а в каком-нибудь хелпер-классе. сделай метод, который заполняем комбобокс значениями. и рабостоно вызывая его при показе формы, передавая параметром нужный комбобокс.
  • 0
Да, я такой!