Глюк прорисовки списка ComboBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 3:03

Откройте список, наведите мышь на 1, нажмите Ctrl+Del - зацените глюк списка. Затем можете также удалить 2 и т.д. И Combo.Refresh не помогает :evil:
Код: Выделить всё
Option Explicit

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
'Debug.Print "Combo1_KeyDown"
    ComboDelItem Combo1, KeyCode, Shift
End Sub

Private Sub Form_Load()
Dim i As Long
Combo1.AddItem ""
For i = 1 To 4
Combo1.AddItem CStr(i)
Next i
End Sub
   
Public Sub ComboDelItem(Combo As ComboBox, KeyCode As Integer, Shift As Integer)
    If Shift = 2 And (KeyCode = vbKeyDelete Or KeyCode = 110) Then
      Combo.RemoveItem Combo.ListIndex
    End If
endDel: Combo.Refresh
End Sub

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Глюк прорисовки списка ComboBox

Сообщение jangle » 29.03.2009 (Вс) 3:17

Никакого глюка здесь нет. Может хватит создавать бессодержательные темы?

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 3:31

как это нет, есть.
Вложения
глюк.png
глюк.png (1.49 Кб) Просмотров: 2587

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Глюк прорисовки списка ComboBox

Сообщение Debugger » 29.03.2009 (Вс) 10:42

Тебе даже звание дали :D . Чем ты к Combo приелся?

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 14:52

ого. Спасибо :) Видать, Combo самый худший из контролов относительно своей простоты. Хотя ListView тоже такое чудо... Надоело уже исправлять баги контролов. Зла не хватает на этот Микрософт.
Так, я не понял, jangle, у тя действительно нет глюка? Ты ставил патчи к VB?
Последний раз редактировалось Space 29.03.2009 (Вс) 15:02, всего редактировалось 1 раз.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Глюк прорисовки списка ComboBox

Сообщение jangle » 29.03.2009 (Вс) 14:56

Space писал(а):Надоело уже исправлять баги контролов. Зла не хватает на этот Микрософт.


Для начала, желательно исправить свои кривые ручки, или хоть чему-то научится...

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 17:00

что, у всех всё гуд?

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Глюк прорисовки списка ComboBox

Сообщение dr.MIG » 29.03.2009 (Вс) 18:54

То же самое, что и на картинке. В данном случае после удаления сделай Refresh для формы, а не для списка, и данный эффект исчезнет.
ИМХО, все проблемы во всех подобных топиках про комбобокс связаны с попыткой придать этим ЭУ нехарактерное для них поведение (удаление элемента при раскрытом списке, насильное раскрытие списка во время набора текста). Действуй в рамках стандартного поведения стандартных компонентов и проблем станет меньше :).
Salus populi suprema lex

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 19:23

jangle , отойди от зеркала и ответь на мой вопрос, плиз. Я надеялся, что кто-то найдёт решение без Me.Refresh.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 29.03.2009 (Вс) 19:36

Дело в том, что насиловать беззащитный контрол интересно только тебе. Другим не особо. Поэтому и поиск решения проблем, возникающих как результат изнасилования контрола, других особо не интересует.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 20:05

может ещё никого не волнует, как будут работать их проги?

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Глюк прорисовки списка ComboBox

Сообщение dr.MIG » 29.03.2009 (Вс) 20:29

Возможно, проблемы связаны с неправильной логикой, заложенной в интерфейс программы — для чего может понадобиться удаление элемента из раскрытого списка ComboBox?
Salus populi suprema lex

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 20:43

для удаления :)

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Глюк прорисовки списка ComboBox

Сообщение dr.MIG » 29.03.2009 (Вс) 20:49

Это понятно, но непонятно для чего это может потребоваться в случае с ComboBoxom в такой форме. Можно конкретный пример — какая информация туда загружается, откуда она берется, какой функционал должен предоставлять интерфейс? Почему нельзя предоставить пользователю отдельную форму для редактирования элементов ComboBox'а?
Salus populi suprema lex

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 29.03.2009 (Вс) 21:16

Ты хочешь протащить идею святой троицы TextBox+CommandButton+ListBox? Нет, я не хочу такого удовольствия. У меня таких комбов множество и ещё будут. Всё я уже сделал и больше не хочу разговаривать на эту тему. Жду jangle с его волшебным Басиком, в котором не было такого глюка :)
Еще я создам опрос в трёпе, отвечайте, будет интерэсно. Есть ещё идея собрать статистику по использованию контролов, может уже такое было, но сомневаюсь, хочу заюзать, но пока не знаю, как всё это оформить (с кем бы посоветоваться в личке, мабудь с Хакером, но он сильно критично ко всему относится, и, похоже пребывает в нирване, его проблемы сего мира мало волнуют, но всё же попробую).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 29.03.2009 (Вс) 21:30

Я не в нирване. Действует в рамках правил, и не будет никаких проблем.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Глюк прорисовки списка ComboBox

Сообщение jangle » 29.03.2009 (Вс) 21:55

Space писал(а):ого. Спасибо :) Видать, Combo самый худший из контролов относительно своей простоты. Хотя ListView тоже такое чудо... Надоело уже исправлять баги контролов. Зла не хватает на этот Микрософт.
Так, я не понял, jangle, у тя действительно нет глюка? Ты ставил патчи к VB?


Нет у меня никакого глюка, VB SP6 стоит

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Глюк прорисовки списка ComboBox

Сообщение jangle » 29.03.2009 (Вс) 22:09

Space писал(а):jangle , отойди от зеркала и ответь на мой вопрос, плиз. Я надеялся, что кто-то найдёт решение без Me.Refresh.


Разумеется можно и без Me.Refresh, например обойти функцией EnumChildWindows все дочерние окна формы, найти окно с классом SysListView32 (твой выпавший список). И функцией UpdateWindow его перерисовать.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 30.03.2009 (Пн) 1:06

ааааааааа...... я сошла с ума... Доработал код, глюк стал такой, что приводит к ненормальной работе. А что я делаю нестандартно? Открываю список через клик, а не посылкой сообщения, всё остальное тоже вполне стандартно! аааааааа!!!!!!
Вложения
BugCombo.zip
(1.33 Кб) Скачиваний: 54

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 30.03.2009 (Пн) 1:21

Как ты не понимаешь. Удаление пунктов из раскрывающегося списка ComboBox-ов во время отображения этого списка — бредовое занятие.

Не пробовал для разнобразия насильно вытаскивать DVD-диск из DVD-плеера непосредственно в процессе проигрывания фильма?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 30.03.2009 (Пн) 1:31

может и бредовое. Но во первых - мне удобнее удалять в раскрытом списке. Во вторых - почему пользователь должен знать об этом? Он откроет список и будет спокойно удалять из списка, нажимая горячие кнопки. В третьих - у комбика нет явной возможности скрывать список (только через сообщение) и при RemoveItem список тоже не скрывается - значит, обновление списка должно быть корректным!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 30.03.2009 (Пн) 1:36

Но во первых - мне удобнее удалять в раскрытом списке

Да кого волнует, что удобно тебе? Ты работаешь на пользователя, на конечный результат, на создание качественного софта, а не на себя.

Во вторых - почему пользователь должен знать об этом?

Вот именно! Пользователь и понятия не имеет, что можно удалять пункты из дропдаун-списка. Пользователь повидал в жизни тысячи комбобоксов в сотни разных программах, и не в однйо из них он не видел ничего подобного (удаления пунктов из комбобокса горячими клавишами во время показа дропдаун-списка). Потому что такого нигде нет. Потому что это не входит в логику работу комбо-бокса.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 30.03.2009 (Пн) 1:46

ёпзд... А какова логика удаления из комба? Я вообще не припомню, где я такое мог видеть. Клик на Item, потом Ctrl+Del при закрытом списке? До этого надо ещё додуматься. А удаление записи на списке даже инстинктивное решение :) Если хочешь, проведи эксперимент, дай мою прогу юзеру и скажи - удали записи в списке. Только в ToolTip поставь "Ctrl+Del - удалить запись" или скажи ему это. И увидишь!!! А лучше взять 3-х неискушённых юзеров и получить статистику ;)
Последний раз редактировалось Space 30.03.2009 (Пн) 2:51, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 30.03.2009 (Пн) 1:58

О, кошмар. Тебя ни в коем случае нельзя допускать к разработке интерфейсов.

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

Ну и назначения тултипов ты определённо не понимаешь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 30.03.2009 (Пн) 2:08

чё такое, не понял? Назови широко известную прогу, где есть удаление из комбо? Да, использую не по назначению - для ввода значения из списка или ввода своего значения, а также для добавления нового значения в список и удаление оного оттедова :) А ещё пишу список в файл, чтобы список не пропал случайно :) Хотел взять чекбокс для этой цели, но потом неожиданно передумал :) А для чего ты используешь тултип? Эм, сейчас догадаюсь... Для скрытия/показа контрола? ;)
А если серьёзно, проведи эксперимент. Будет интересно. Только юзеров вместе не сажай. По одному используй ;)

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Глюк прорисовки списка ComboBox

Сообщение pronto » 30.03.2009 (Пн) 2:40

Инстинктивное решение - это панель управления инструментов с кнопочками "Добавить", "Удалить", "Редактировать" ("Сохранить", "Загрузить" и тд.). Ещё можно прикрутить к комбо свое контекстное меню с аналогичными пунктами - просто и понятно (для всех).
Последний раз редактировалось pronto 30.03.2009 (Пн) 3:23, всего редактировалось 1 раз.
O, sancta simplicitas!

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 30.03.2009 (Пн) 2:50

ой, Боже, панель управления... :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 30.03.2009 (Пн) 3:25

не понял? Назови широко известную прогу, где есть удаление из комбо?

И ведь не врёт: действительно «не понял». Я ему говорю, что такая практика не используется ни в одной из существующих программ, а он меня просит назвать такую программу...

А если серьёзно, проведи эксперимент.

Эксперимент какой? Что случайно выбранный пользователь удалит пункты из комбо-списка, если его заставить сделать это и если при этом указание насчёт того, каким способом это делается, будет висеть в тултипе?

Так а что тут ставить эксперименты? Конечно удалит. Пользователи вообще выдерживают любые измывательства над собой, если ты им напишешь, как в условиях кривой системы сделать какое-то действие.

Можно, например, повершать седьмой этаж на кнопку «-1». Главное только сказать об этом пользователям:
Изображение
И ничего, пользователи стерпят тупость системы. Что им ещё остаётся делать. И, представь себе, можно провести такой же эксперимент: сколькие из пользователей лифта «интуитивно» нажмут «-1», когда их попросят уехать на седьмой этаж, при условии, что на двери лифта будет висеть тултип, изображенный на фотографии выше. И результат эксперимента очевиден. Только вот это не опровергает того, что система — тупа, а люди, сделавшие её — криворукие идиоты.

Когда ты будешь делать свой проигрыватель, ты можешь сделать так, что воспроизведение/пауза будут совершаться по нажатию на кнопку "Вкл" на системном блоке. Не забудь, главное, повешать тултип.

Только вот это против правил — делать так, что кнопка, которая включает/выключает системный блок вдруг будет использоваться в качестве кнопки управления воспроизведения в твоём проигрывателе. Это против правил. Да, нигде не написано, что так делать нельзя. Но это против здравого смысла. Точно так же нигде не написано, что нельзя удалять пункты из комбо-бокса в то время, когда он раскрыт.

А нельзя потому, что такое никому никогда не можт понадобиться. Но тебе ведь понадобилось? Понадобилось. И, очевидно, понадобилось потому, что ты используешь ComboBox не по назначению.

Но тебе, похоже, плевать, что не по назначению: главное для тебя — найти какой-нибудь худо-бедно подходящий контрол и не забыть повешать тултип, на тему того, как всё-таки удалять пункты.
Точно так же, как кому-то плевать, что ногомойки используются не по назначению, им главное подходящую для стирки бельзя ёмкость найти ну и тултип сделать:
Изображение







А для чего ты используешь тултип? Эм, сейчас догадаюсь... Для скрытия/показа контрола?

Я его использую по назначению. И ты его используешь как бы по назначеню. И электрик ЖЭУ использовал бумажный тултип по назначению:
Изображение
Только вот в нормальной программе/нормальном доме, сделанном не криворукими программистами/строителями/электриками, а профессионалами, никогда не будет таких тултипов, как на картинке — тултипов, сообщающих пользователю о кривости системы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Глюк прорисовки списка ComboBox

Сообщение Space » 30.03.2009 (Пн) 4:01

Хакер, тя понесло, да в не ту степь. Спать те пора. Что такое "Ctrl+Del - удалить запись"? Это возможность удаления записи. А у нас в чём проблема? Проблема в способе удаления записи. И причём тут твои аналогии? Я что, пишу в тултипе "Удаляйте через список!"? Допустим, комбик нигде и никем не использовался для удаления записей. Брать авторские права? :) А на кой там RemoveItem? Для красоты? Ну не учли программеры Микрософта возможность удаления из списка. Так что мне, застрелиться? Или я должен юзать святую троицу? А на кой тогда комбик? А эксперемент я всё же проведу, только вот с кем бы :) А использую я комбик по назначению, не переживай.
А не используется такая практика, т.к. это редкая необходимость + кривой комбик, который заменяется святой троицей (кто там говорил, что заменил для себя, посмотри в топе... :))
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глюк прорисовки списка ComboBox

Сообщение Хакер » 30.03.2009 (Пн) 9:50

Так что мне, застрелиться?

Нет. Убить себя «ап стену». Серьёзно, не знаю, что в таком случае делать. Перейти туда, где UI рядом не пахнет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 46

    TopList  
cron