![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Edd |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 23.3.2006 Репутация: 1 Всего: 1 |
Создаю свою компоненту (UserControl), у этой компоненты есть свойство,
которое мозет принимать несколько значений. Пытаюсь сделать это как ComboBox,
ComboBox у компоненты соответствующий показывается, но он не заполнен. Как его заполнить? |
|||
|
||||
Tror |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
![]() ![]() ![]() закидайте меня камнями, но это удаление гланд через хм...... сами знаете что ![]() насколько я понял, из того куска кода, что вы привели, можно вообще не создавать новый компонент (кстати, слово компонент мужского рода). вариант #1: все что нужно это заполнить коллекцию элементов комбобокса в дизайне или в рантайме, в зависимости от потребностей. Затем в обработчике SelectedValueChanged рисуем то что нам нужно.
вариант #2: (это уж если совсем невмоготу и хочется сделать свой компонент) Наследуем свой класс от комбобокса и переопределяем его метод OnSelectedValueChanged.
Да, и попытайтесь таки давать переменным и методам осмысленные названия на английском, благо словарей сейчас предостаточно. --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
||||
|
|||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Привет, не хотел новую тему создавать, поэтому решил написать сюда...
Хочу создать свой ComboBox, код следующий:
В итоге создаёт компонент, но в результате в этом комбобоксе значения выводятся 2 раза - т.е. дубликаты. Такое чувство, что он прогоняет этот цикл 2 раза, но выводит в консоль что элементов как раз 24, сколько и должно быть - что я делаю не так ? |
|||
|
||||
Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
"Такое чувство" легко откидыватся / подтверждается отладчиком =) бряк на цикл и F10 (вроде) F10 F10 по нужного рез-та но если выводит нужный рез-тат то все должно быть отлично) да и по коду вроде все норм. Да и вроде не зачем заходить в цикл 2 раза если Вы его не вызываете 2 раза) Это сообщение отредактировал(а) Exai1e - 27.11.2009, 18:42 -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Exai1e, походу это какой-то баг в Визуал Студио - мне не поддаётся объяснению такое поведение - попробуйте сами ради интереса, если не очень влом, хотелось бы знать это только у меня так или у всех...
Использую Visual Studio 2008, делаю следующее: 1) Создаю Windows Form приложение 2) Создаю новый класс и добавляю в него тот код, который я привёл выше 3) Компилю, открывается пустая форма, после чего в панеле инструментов появляется этот новый элемент 4) Добавляю его на форму и снова запускаю приложение В результате в combobox выдаёт 2 раза эти значения: 0 1 2 ... 23 0 1 2 ... 23 Потом беру и в свойствах этого элемента добавляю вручную в поле Items какие-нибудь значения, теперь уже выводит этот цикл нормально: 0 1 2 ... 23 + дальше те, что ввёл вручную После этого удаляю те, что ввёл вручную и запускаю снова - теперь выводит список правильно - т.е. 1 раз. Но если я добавлю на форму второй элемент этого класса, то история повторяется - в первом всё нормально, а в новом опять 2 раза - короче бред какой-то, не пойму... Попробуйте кто-нибудь пожалуйста и скажите так у вас или нет ? Это сообщение отредактировал(а) Kizja - 28.11.2009, 00:20 |
|||
|
||||
Lunatic2009 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 1.7.2009 Репутация: нет Всего: 3 |
Только что попробовал, при добавлении этого контрола в файле дизайнера формы появляется следующий код:
|
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Lunatic2009, спасибо, что попробовал, а при запуске в самом комбобоксе на форме у тебя тоже выводит один цикл ? - потому что у меня в файле дизайнера формы один цикл, но при запуске показывает всё равно два...
вот скриншот с запуска программы: http://pic.ipicture.ru/uploads/091128/2VeW2UnvZ5.jpg |
|||
|
||||
Lunatic2009 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 1.7.2009 Репутация: нет Всего: 3 |
Выводится 2х24, один раз заполняется в конструкторе, второй - в файле дизайнера.
Это сообщение отредактировал(а) Lunatic2009 - 28.11.2009, 02:34 |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Хм, хорошо, но что я тогда в данной ситуации должен сделать, чтобы показывало бы 1х24 ?- если я уберу этот цикл из конструктора, то вообще нигде не останется этих значений - я так понимаю, что в дизайнере он их генерирует как раз за счёт того цикла, который находится в конструкторе.
Или что невозможно вообще сделать используя наследование комбобокса, чтобы в данной ситуации правильно работало и можно значения задавать только через Items в панеле свойств элемента ? Может я могу сделать override какому-то методу вместо того чтобы ставить в конструктор этот цикл ? Извините за возможно тупые вопросы, просто я больше как-то с Java знаком, т.е. в Visual Studio почти ничего не делал раньше. Это сообщение отредактировал(а) Kizja - 28.11.2009, 11:40 |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Ку-ку ? - неужели никто не может ответить ? - это же ненормально, что при запуске программы появляются 2 раза одни и те же значения - неужели те, кто постоянно пользуются Visual Studio не могут ответить в чём может быть дело ? Не верится, что я первый, кто столкнулся с необходимостью наследования комбобокса и добавления в него таким образом значений...
Это сообщение отредактировал(а) Kizja - 30.11.2009, 19:04 |
|||
|
||||
Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
частично решил через Singleton
но тогда бред - только 1 компонент... попробую найти еще какое либо решение, вопрос интересный =) попа какето, в интернете не находил подобных проблем) как то это странно =) нашел точнее, но это видимо ваша, потомучто текст программы один в один) уфф.. ![]() Это сообщение отредактировал(а) Exai1e - 30.11.2009, 20:57 -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
кстати, почему то если создавать компонент в рантайме, то все нормально
мб и правдо баг VS | компонента ? или визуальные компоненты, что более вероятно (которые потом кидаются с тулбара, пишутся как то иначе....) Это сообщение отредактировал(а) Exai1e - 30.11.2009, 21:22 -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Exai1e, только что у меня вроде как получилось сделать по другому - через "пользовательский элемент" (UserControl):
Однако у меня как-то осталось ощущение всё равно, что я не решил проблему, а её обошёл ![]() Хотелось бы конечно выяснить, что всё таки с тем вариантом сделать, чтобы заработало, но пока ни от кого внятных ответов не получил... Это сообщение отредактировал(а) Kizja - 30.11.2009, 21:39 |
|||
|
||||
Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
Kizja, с тем вариантом "что есть" конструктор Form'ы как уже было написано выше, сам почему то заполняет ComboBox
вопрос, почему ? наверно потому то контролы надо делать через ваше решение, а именно через UserControl Думаю, проблему вы решили, а не обошли) Наверно к юзерконтрола есть что то внутри нужное и не известное =) а через WinForms мона делать если только создавать в рантайме. В написании компонентов не силен вообще, ваш вопрос, дал мне возможность совсем немного "пощупать" это дело =) Это сообщение отредактировал(а) Exai1e - 30.11.2009, 21:55 -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
Kizja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 81 Регистрация: 15.7.2007 Репутация: нет Всего: нет |
Exai1e, просто вопрос тогда в том как вообще правильно писать: например, если мне надо так же наследовать скажем не Combobox, а Checkbox, который будет работать по какому-то моему сценарию, то аналогичного бага как данный скорей всего не возникнет.
И в таком случае напрашивается простое наследование, чтобы избежать лишние телодвижения, которые возникли с UserControl (добавление самого UserControl компонента + добавление в него Combobox - надобность в которых просто отсутствует). С другой же стороны использовать всегда обычное наследование и вдруг в каких-то определённых случаях (как например в этом с Combobox) использовать UserControl тоже как-то не очень правильно - нужен какой-то общий принцип и однообразие в этом подходе, а если можно сделать и так и сяк, то ясностью в выборе решения здесь не пахнет ![]() В таком случае им надо было каким-то образом запретить обычное наследование этих компонентов, иначе хочешь того или нет, но вопрос что из этих двух вариантов использовать появляется сам собой: один короче, но иногда бажит, другой - необоснованно усложнён... |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |