Не могу создать ListBox ActiveX с уникальными значениями

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

Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 21.08.2015 (Пт) 20:23

Нужен контрол ListBox, который будет
1) при AddItem проверять, нет ли уже в ListBox такого значения и добавлять только в том случае, если вводимое является уникальным
2) дополнительно к Sorted, нужно свойство SortRevers, то есть сортировка в обратном порядке. То есть нужно чтоб сортировка вообще включалась/отключалась (Sorted=True/False) и если сортировка включена, чтоб сортировало так, как диктует SortRevers=True/False (обратная/прямая сортировка).

Проблема собсно, в чём - написать несколько строк проверки уникальности я могу сам, но никак не могу понять куда мне её вписывать, прочёл кучу всяких текстов по созданию контролов, Эскина того же, но, что поделаешь - тупой видимо, никак не могу создать листбокс! Отсюда две просьбы:

1)Не может ли кто-нибудь сделать так сказать "шаблон" пользовательского ListBox контрола из обычного ListBox и указать внутри где мне вставить проверку уникальности. Вроде это для знающего человека совсем несложно. Типа :
Код: Выделить всё
Private Sub CheckUnique()
"Здесь, дебилоид, должен быть твой код! Смотри не напутай!"
End Sub


2)Можете ли посоветовать как реализовать обратную сортировку - то есть не сам код прошу (обратную сортировку и перемещение элементов списка я знаю как сделать), а подходы какие могут быть, не совсем представляю логику работы обратной сортировки (особенно в связи со свойством Sorted=True/False), когда она должна происходить? Свойство Sorted должно быть видимо False?
То есть я как представляю, если я хочу сделать обратную сортировку, сперва должно устанавливаться Sorted=True (отсортировалось нормально), затем Sorted=False и только после этого я манипулирую с элементами списка для сортировки в оьратном порядке, да? или бред?

Заранее благодарен!

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 21.08.2015 (Пт) 20:43

giaber писал(а):а подходы какие могут быть, не совсем представляю логику работы обратной сортировки

Инвертировать возвращаемое значение сорт-функции.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 21.08.2015 (Пт) 21:48

Уважаемый Хакер, не могли бы вы немного разжевать, что вы имеете ввиду? Что такое "возвращаемое значение сорт-функции"?

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 21.08.2015 (Пт) 21:51

Это число, которое возвращает сорт-функция.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 21.08.2015 (Пт) 22:31

Есть такой старый, старый прикол - Тебя спрашивают: "Братишка, сигареты есть?" Ты отвечаешь:"Есть" и проходишь мимо. Прикольно. Формально ты прав - ты ж ответил на вопрос точно!
При всём моём к вам большом уважении, Хакер, по-моему вы играете в эту же игру, вы же прекрасно понимаете, что я не понимаю, вы прекрасно знаете, как надо объяснить, чтоб я понял, но... Не могу на вас обижаться - вы такой какой вы есть, принимаю вас, как принимают, например, ветер - иногда он помогает хорошо гореть костру, а иногда, наоборот, не даёт ему разгореться. Когда он помогает - мы ему благодарны, когда не помогает - не обращаем внимания - ветер, он ведь сам по себе, где-то там, в недостижимой нам вышине... Как-то так.
Я вроде бы понимаю, что вы пытаетесь таким способом заставить нас ламеров, думать правильно, но, к сожалению (для нас), вы относитесь ко всем как к ученикам-программистам, идущим по высокому программерскому пути, но среди нас (и я в первую очередь) не все выбрали стезю программера, мы просто иногда прибегаем в вашу школу ну, скажем, погреться, и жизненная ситуация никак не позволяет нам заняться программированием профессионально, в нашей жизни достататочно тех крох информации (таблицы умножения, типа) что мы подсмотрели на доске. Вы никак не хотите дать право "существовать" таким типам, как я - вы говорите: если ты не будешь сидеть у печки так как положено прогеру -не грейся вообще. Всё-таки не думаю что это верно.
Ничего личного, Хакер, я вас действительно очень уважаю. Просто немного поворчал, надеюсь вы меня извините.
В общем, я наверное, дождусь, может кто другой объяснит на моём уровне. Но вам всё равно спасибо за попытку помочь.

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 21.08.2015 (Пт) 22:35

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

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

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 21.08.2015 (Пт) 23:39

Вы точно можете сказать, что я так плохо сформулировал что вы не понимаете, о чём я спрашиваю? Вопрос риторический - уж извините, но даже если вы скажете что "да, не понимаю вопроса" я не поверю. Вы прекрасно понимаете мою проблему и знаете как помочь.
И Вы, собственно, поттверждаете тот пример, который я привёл - человек, отвечающий "Есть" на вопрос о сигаретах "Братишка, сигареты есть?" - прекрасно знает, что нужно было спрашивающему, но ведь просящий сигарету , как это ... во! "не был классным в области ... постановки вопроса"
Заменим ситуацию: Человек вязнет в болоте и спрашивает вас: Верёвка есть? Как вы сказали он не классный в постановке вопроса и поэтому вы отвечаете "Есть" и проходите мимо, конечно, я утрирую до гротеска, но надеюсь вы понимаете что вы в таком стиле и поступаете, ведь вы считаете что "Дело в том, что я думаю, что каждый должен быть классным в области ведения дискуссии и постановки вопроса"


До тех пор, пока вопрос не задан так, что на него можно ответить так, чтобы ответ устроил автора, я не буду отвечать на него как либо иначе, пытаясь предугадать и самостоятельно конкретизировать вопрос

Много раз перечитал свой пост - как там может быть что-то непонятно?
Хотите пари - придёт кто нибудь в эту тему и коротко и ясно даст ответ на мою проблему без особенных каких-то вопросов о том что-же я имел ввиду - кстати, как уже много раз бывало и со мной и с другими (я за эти годы перечитал ну почти все посты с вашим участием)
Да и вообще, Хакер, к чёрту эти дискуссии - хотите помочь - помогите, не хотите? - ваше ПОЛНОЕ право. Ещё раз подчеркиваю - вы прекрасно ПОНИМАЕТЕ что я спрашивал и, конечно же, ЗНАЕТЕ, как решить поднятые мной вопросы


А на вежливый чуть ли не до подобострастия вопрос:
Уважаемый Хакер, не могли бы вы немного разжевать, что вы имеете ввиду? Что такое "возвращаемое значение сорт-функции"?

Отвечать:
Это число, которое возвращает сорт-функция.


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


ЗЫ
А вот, вспомнилось:
Что с подлодкой? - Она утонула
Не узнаёте себя, Хакер?

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 22.08.2015 (Сб) 9:36

giaber писал(а):Вы точно можете сказать, что я так плохо сформулировал что вы не понимаете, о чём я спрашиваю?

Чуть-чуть не так. Ты плохо сформулировал и я не понимаю, что мне ответить.

giaber писал(а):Верёвка есть? Как вы сказали он не классный в постановке вопроса и поэтому вы отвечаете "Есть" и проходите мимо, конечно

Не нет, аналогия не точная. Человек, спрашивающий «Верёвка есть» — я бы сказал, что он хорош в деле задавания вопроса. Если проводить аналогию с твоей темой, то человек говорит «могу представить, как работает сила упругости в верёвке, но не могу понять динамику систему! Прочёл кучу книг по физике, того же Ландау-Лифшица, но там ни слова про болото»

giaber писал(а):Считаю, что не человеку, который может себе позволять так отвечать, говорить об
быть классным в области ведения дискуссии и постановки вопроса

Так быть классным в ведении дискуссий — это не значит услаждать слух собеседника и быть для него в целом приятным. Это значит придерживаться порядка мыслей, строгости формулировок, четкости логической линии.

giaber писал(а):Ещё раз подчеркиваю - вы прекрасно ПОНИМАЕТЕ что я спрашивал и, конечно же, ЗНАЕТЕ, как решить поднятые мной вопросы


Я не понимаю. Если человек говорит, что он смотрел фильм, но не досмотрел его, и просит дорассказать ему сюжет — сложно сделать это без дополнительных данных. Поскольку фильм прогрессирует в одномерном пространстве, такой информацией были бы сведения о точке во времени, на которой оборвался просмотр фильма. Знаем, в какое мгновение оборвался просмотр — понимаем, с какого места нужно начать рассказывать. Иначе придётся пересказывать весь фильм.

В случае, если человек копал огород и прервался где-то и просит нас докопать, чтобы мы могли продолжить его работу, он уже должен сообщить нам не одномерную точку в одномерном пространстве, а несколько точек в двухмерном пространстве, ограничивающих многоугольник, на котором надо проводить работу. Иначе придётся копать весь огород..

Но если фильм одномерный, а огород — 2D, то концепции из мира программирования — вообще многомерная штука. И без знания границ того, что именно нужно разъяснять, совершенно невозможно приступить к разъяснению. Разве что разъяснять всё подряд, — но уж нет, этим я заниматься не буду.


Это тот случай, когда проще отделаться готовым кодом, чем объяснить человеку, что всё-таки он не умеет задавать вопросы абсолютно.
StrageListBox.zip
(11.38 Кб) Скачиваний: 183


Я назвал контрол StrangeListBox. Потом что я не очень понимаю, зачем это всё надо. Я бы пользовался ListView, если бы мне были нужны какие-то сортировки. Обработку того, чего каждый уважающий себя контрол должен делать (ReadProperties/WriteProperties, сохранение в Property Bag) делай сам, тем более, если читал Эскина — я и так написал ~1400 строк и у меня совершенно нет желания писать что-то ещё.

Было бы, конечно, удобнее воспользоваться owner-draw-подходом, чем перетасовывать пункты.

Код сильно не тестировался.....
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 23.08.2015 (Вс) 0:45

Ну и что в итоге — получил код и пропал?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 23.08.2015 (Вс) 11:20

Нда-а-а-а-а-а! Высший класс! Я всегда говорил : вы, Хакер – монстр! В хорошем смысле этого слова :thumright: .
Не удержусь и сделаю небольшое отступление (заранее извиняюсь за нецензур, но из песни слов не выкинешь):
[Хакер] :: Оффтопик с криптованным матом вырезан. Мат, даже криптованный — запрещён. Устное замечание.

Я вам очень благодарен, Хакер, за такой жирный кусок, но, увы, не по Сеньке шапка – это не мой уровень, я смотрю на ваш код, как баран на новые ворота, в абсолютной прострации, и не думаю что в обозримом будущем смогу его понять. Хуже того (в реале в такой ситуации человек на вашем месте с досадой делает «тьфу…» поворачивается и уходит) я даже не могу использовать его напрямую, не разбираясь - сделать из него ocx я так и не смог - про компиляцию написано везде(я скачал и прочитал 29 описаний "как сделать ActiveX контрол") так :
«Заходим в меню File, далее выбираем Make имя_проекта.ocx»
У меня ничего такого нет – обычная стандартная строчка «Make Project1.exe» - что я не так делаю?
Последний раз редактировалось Хакер 23.08.2015 (Вс) 18:33, всего редактировалось 1 раз.
Причина: Нарушение пункта 3.2 правил Форума.

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 23.08.2015 (Вс) 18:34

giaber писал(а):У меня ничего такого нет – обычная стандартная строчка «Make Project1.exe» - что я не так делаю?

Тип проекта поменяй.

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

Что там не понимать, если там комментарии щедро разбросаны по коду?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 23.08.2015 (Вс) 20:46

Поменял на ActiveX Control, строка "Make .ocx" появилась, но при попытке компилировать выдаёт:"No public UserControl detected", чего-то я опять туплю

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

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

У UserControl появляется свойство Public, которое после смены типа проекта остаётся в состоянии False.
Неужели трудно догадаться или найти поиском?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 24.08.2015 (Пн) 14:57

Догадаться - почти невероятно для моего уровня знания и сообразительности, а вот погуглить - каюсь, виноват!
Но теперь другая проблема, и здесь я гуглил, но ничего не смог найти/понять:
на вот это:
Код: Выделить всё
Implements IListBoxOrderRelation

ругается так:"Private object modules cannot be used in public object modules as parameters or return types for public procedures ..."
то есть:"Private объектные модули не могут быть использованы в Public объектных модулях в качестве параметров или возвращаемых типов для Public процедур"
Поскольку единственный известный МНЕ способ сделать что-то Public -ом - это приписать вначале Public (ну таков мой уровень знаний VB :oops: :D ) ничего не смог сделать с этой проблемой, помогите, плиз, ещё чуть-чуть

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

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение Хакер » 24.08.2015 (Пн) 16:53

Идёшь в свойства класса и ставишь Instancing = PublicNotCreatable.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

giaber
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 14.01.2009 (Ср) 13:51

Re: Не могу создать ListBox ActiveX с уникальными значениями

Сообщение giaber » 25.08.2015 (Вт) 18:46

Большое, большое спасибо, Хакер! И за долготерпение тоже!


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

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

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

    TopList