Полная информация

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

Полная информация

Сообщение Domenic » 07.07.2008 (Пн) 13:15

Есть ListBox(ComboBox)и TextBox,хочу из списка получать полную информацию.
Например в списке есть разные города,кликаю на Москва,а в TextBox(Label) должна отражаться полная информация,а не просто Москва:
город герой,основан в таком то году,население столько то, итд.
Можно ли сделать попроще или только через создание базы данных?
Буду очень признателен за код такой программы.
Спасибо за помощь!
Последний раз редактировалось Domenic 07.07.2008 (Пн) 20:04, всего редактировалось 1 раз.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 07.07.2008 (Пн) 14:31

Хм. Доберусь до дома, дам один класс, который я когда-то писал для этих целей. По поводу БД -- поищи по ADO.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 08.07.2008 (Вт) 8:27

Domenic
Сделай через .ini
Код: Выделить всё
[Города]
Город=Описание

или через .csv
Код: Выделить всё
Город,Описание

или через ресурсы, String Table, например.
Все необходимые функции для работы с вышеперечисленным есть.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Domenic
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 07.07.2008 (Пн) 13:06

Сообщение Domenic » 08.07.2008 (Вт) 14:30

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

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 08.07.2008 (Вт) 15:27

Domenic
Подробнее: Класс для работы с INI если предпочтешь INI, если предпочтешь csv, изучай справку по оператору Open, если предпочтешь ресурсы, изучай редакторы ресурсов, любой на вкус, и изучай функцию LoadResString
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 09.07.2008 (Ср) 12:04

BV писал(а):Хм. Доберусь до дома, дам один класс, который я когда-то писал для этих целей.
Вложения
FDB.tar
(25.5 Кб) Скачиваний: 46
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

HKEY_SUPER_MASHINE
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 02.07.2008 (Ср) 12:17
Откуда: Тольятти, школа, случайно

Сообщение HKEY_SUPER_MASHINE » 10.07.2008 (Чт) 8:07

Можно попроще. Делаем так:
1) Определяем пользовательский тип typCity с полями: город_герой, основан, население и другие.
1) Создаём динамический массив arrCity() типа typCity.
2) Открываем заранее подготовленный файл со списком городов в режиме Random.
3) В цикле перераспределяем массив и записываем в него данные.
4) Отображаем в списке (опять же, в цикле) элемент массива 'город'.
5) При нажатии на список отобразить в поле весь элемент.

В общем виде код выглядит так:
Код: Выделить всё
Private Type typCity
   Название As String
   Герой As Boolean
   Основан As Integer
   Население as long
   'На месте этих комменариев должны быть другие поля
End Type

Dim arrCity() As typCity

Private Sub Refresh_Data()
   Open "<file_address>" For Random As 1 Len = Len(typCity)

   ReDim arrCity(0)

   Dim ccount As Integer
   Do While Not EOF(#1)
      ReDim Preserve arrCity(ccount)
      Get #1, ccount, arrCity(ccount)
      ccount = ccount + 1
   Loop

   Close#1

   For ccount = 0 To UBound(arrCity)
      ListBox.AddItem arrCity(ccount).Название
   Next
End Sub

Private Sub ListBox_Click()
   Dim MSG As String
   MSG = "Информация о городе:" & Chr(13) & Chr(13)
   MSG = MSG & "Название: " & arrCity(ListBox.ListIndex).Название & Chr(13)
   MSG = MSG & "Город-герой: " & ConvertBoolean(arrCity(ListBox.ListIndex).Название) & Chr(13)
   MSG = MSG & "Основан в: " & arrCity(ListBox.ListIndex).Основан & Chr(13)
   MSG = MSG & "Население, чел.: " & arrCity(ListBox.ListIndex).Население
   Label = MSG
End Sub

Private Function ConvertBoolean(data As Boolean) As String
   If data = True Then ConvertBoolean = "Да" Else ConvertBoolean = "Нет"
End Function


Примечания к коду (проигноируете - код работать не будет!):

Замена в коде:
Вместо ListBox пишите имя списка для вывода городов.
Вместо Label пишите имя поля ввода или надписи, в котором будет отображаться информация о городе (учтите, он

должен быть достаточно большой).
На месте <file_address> должен стоять путь к файлу, где записана информация о городах.

Если произойдёт ошибка на строке "Get #1, ccount, arrCity(ccount)", поставьте перед первым циклом строку:
Код: Выделить всё
ccount = 1


Пояснения к процедурам:

Refresh_Data() - обновляет список. Используйте в процедуре Load формы.


Если возникнут другие ошибки и вопросы - пишите

Надеюсь, прогу для составления этого списка писать не надо? :D
Чипсы оставляют неприятный осадок в желудке
Их состав оставляет неприятный осадок в душе

HKEY_SUPER_MASHINE
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 02.07.2008 (Ср) 12:17
Откуда: Тольятти, школа, случайно

Сообщение HKEY_SUPER_MASHINE » 10.07.2008 (Чт) 8:12

BV
Теперь я понял, зачем придумали правило "На форуме файлы помещать в ZIP, и только ZIP". Я этот "TGZ" не могу прочесть. :(
Чипсы оставляют неприятный осадок в желудке
Их состав оставляет неприятный осадок в душе

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 10.07.2008 (Чт) 9:46

HKEY_SUPER_MASHINE
Вы еще не используете WinRAR? Тогда мы идем к Вам.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Domenic
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 07.07.2008 (Пн) 13:06

Сообщение Domenic » 10.07.2008 (Чт) 12:07

Надеюсь, прогу для составления этого списка писать не надо? :D[/quote]

:cry: Так былоб здорово посмотреть,как выглядит такая прога или что то похожие.
А так пока это всё для меня дебри.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 10.07.2008 (Чт) 12:44

Domenic
Я все-таки рекомендую заюзать ресурсы. Вот пример (из трех строк кода)
Вложения
ResourceStrings.rar
Проектик-пример
(4.51 Кб) Скачиваний: 42
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Domenic
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 07.07.2008 (Пн) 13:06

Сообщение Domenic » 29.07.2008 (Вт) 23:42

Денис спасибо за помошь-то что нужно :)
У меня возникло еше несколько вопросов,подскажите пожалуйста,если будет пример,буду очень признателен.
1.Как можно сделать чтоб в готовую программу добавлять и новый город и полную информацию о нем.(я воспользовался советом Дениса с ресурсами)
2.Сделал вторую форму,но воспользоваться файлом ресурсов не получаеться.Что я делаю не правильно?(в ресурсах создал вторую строку для второй формы и при в несении новых значений во второй строке файла ресурсов,почемуто все ломается в первой форме,хотя вроде как для первой формы своя строка в файле ресурсов.)
Спасибо за помощь.
P.S-для создания полноценной программы достаточно средств VisualBasica или есть какие то спец программы-инсталяторы?
Последний раз редактировалось Domenic 30.07.2008 (Ср) 14:40, всего редактировалось 1 раз.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.07.2008 (Ср) 7:14

Domenic писал(а):2.Сделал вторую форму,но воспользоваться файлом ресурсов не получаеться,хотя и сделал в этом файле вторую колонку для второй формы.Что я делаю не правильно?
Чтобы увидеть, что ты делаешь неправильно, надо увидеть, что ты собственно делаешь.
Domenic писал(а):P.S-для создания полноценной программы достаточно средств VisualBasica или есть какие то спец программы-инсталляторы?
Полноценная программа вполне успешно создается средствами Visual Basic, однако, для корректной работы на компьютере клиента, необходимо ее корректно устанавливать при помощи специальной программы инсталлятора.
Весь мир матрица, а мы в нем потоки байтов!

Nazarey
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 120
Зарегистрирован: 29.06.2007 (Пт) 0:04

Сообщение Nazarey » 01.08.2008 (Пт) 21:56

Денис писал(а):Domenic
Я все-таки рекомендую заюзать ресурсы. Вот пример (из трех строк кода)

Читал в одном из топов,что ресурсы ни есть гуд,обьясните пожалуйста почему?И что использовать вместо файла ресурсов?
И так,во всём,как хотите,чтобы люди поступали с вами,так и вы поступайте с ними...
Матфея 7:12

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2008 (Сб) 14:13

Самый простой способ хранения всякой такой инфы это XML.

Допустим у нас будет XML вот такой структуры:



Код: Выделить всё
<?xml version="1.0"?>
<cities>
    <city id="moscow">
        <name>Москва</name>
        <cityinfos>
            <cityinfo>
                <displayname>Город-герой</displayname>
            </cityinfo>
            <cityinfo>
                <displayname>Население</displayname>
                <value>11000000</value>
            </cityinfo>
        </cityinfos>
    </city>
    <city id="piter">
        <name>Санкт-Петербург</name>
        <cityinfos>
            <cityinfo>
                <displayname>Город-герой</displayname>
            </cityinfo>
            <cityinfo>
                <displayname>Население</displayname>
                <value>6000000</value>
            </cityinfo>
            <cityinfo>
                <displayname>Расположение</displayname>
                <value>Северо-запад</value>
            </cityinfo>
        </cityinfos>
    </city>
</cities>


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

Загрузка XML файла:

Код: Выделить всё
dim xmlDoc as new MSXML2.DOMDocument

with xmlDoc

.async=false
.load "cities.xml"

end with


Получение списка городов в listview:

Код: Выделить всё
dim citiesList as MSXML2.IXMLDOMNodeList

set citiesList=xmlDoc.selectNodes("//cities/city")

dim city as MSXML2.IXMLDOMNode

for each city in citiesList

listview1.items.add(city.selectSingleNode("./name").innerText).tag=city.attributes.getNamedItem("id").nodeValue

next city


Получение всей инфы по городу и выведение ее в textbox:

Код: Выделить всё
private sub listview1_ItemClick(Item As ListItem)

dim cityinfo as MSXML2.IXMLDOMNode
dim cityInfoValue as MSXML2.IXMLDOMNode
textbox1.text=""

for each cityinfo in xmlDoc.selectNodes("//cities/city[@id='"+Item.tag+"']/descendant::cityinfo")

textbox1.text=textbox1.text+cityinfo.selectSingleNode("./name").innerText

set cityInfoValue = cityinfo.selectSingleNode("./value")

if not cityInfoValue is nothing then textbox1.text=textbox1.text+": "+cityInfoValue.innerText
textbox1.text=textbox1.text+vbCrLf

next cityinfo
end sub


Для работы кода потребуется форма с контролами listview и textbox, подключенная библиотека Mscrosoft XML 6.0

Заметьте, что это подход очень гибок - в cityinfo можно писать любую информацию для каждого города, причем разную для всех - программа просто получает все что вы туда написали и выводит на экран.

Далее, добавление городов и инфы к ним также предельно просто.

Создание нового города:
Код: Выделить всё
private function cityIdExists(cityId as string) as boolean
cityIdExists = xmlDoc.selectSingleNode("//cities/city[@id='"+cityId+"']") is nothing
end function

private function createNewCity(cityName as string, cityId as string) as MSXML2.IXMLDOMNode

if cityIdExists(cityId) then exit function
dim newCity as MSXML2.IXMLDOMNode
dim newCityAtt as MSXML2.IXMLDOMAttribute
dim newCityName as MSXML2.IXMLDOMNode

set newCity=xmlDoc.createElement("city")
newCityAttxmlDoc.createAttribute("id")

newCityAtt.nodeValue=cityId
newCity.attributes.setNamedItem(newCityAtt)

set newCityName=xmlDoc.createElement("name")
newCityName.innerText=cityName
newCity.appendChild("newCityName")

xmlDoc.documentElement.appendChild(newCity)
createNewCity=newCity
end function


Первая функция проверяет, есть ли город с таким ID, чтоб обеспечить уникальность.

Вторая собственно, добавляет город с именем и ID и возвращает ссылку на готовый объект.

Добавление информационного элемента к элементу города:

Код: Выделить всё
private function addCityInfo(cityId as string, infoName as string, optional infoValue as string="")

dim city as MSXML2.IXMLDOMNode

set city=xmlDoc.selectSingleNode("//cities/city[@id='"+cityId+"']")

if not city is nothing then

dim cityInfos as MSXML2.IXMLDOMNode

set cityInfos=city.selectSingleNode("./cityinfos")

if cityInfos is nothing then

set cityInfos=xmlDoc.createElement("cityinfos")
city.appendChild(cityInfos)

end if

dim infoNameNode as MSXML2.IXMLDOMNode
dim infoValueNode as MSXML2.IXMLDOMNode

set infoNameNode = xmlDoc.createElement("displayname")
infoNameNode.innerText=infoName
cityInfos.appendChild(infoNameNode)

if len(infoValue)>0 then

set infoValueNode=xmlDoc.createElement("value")
infovalueNode.innerText=infoValue
cityInfos.appendChild(infoValueNode)

end if
end if
end function





Ну, думаю достаточно написал. Весь остальной функционал типа редактирования, удаления и так далее организуется примерно таким же образом :)
I don't understand. Sorry.

Nazarey
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 120
Зарегистрирован: 29.06.2007 (Пт) 0:04

Сообщение Nazarey » 02.08.2008 (Сб) 17:24

Хм.. :shock: очень даже интересно.У меня много разных кодов(накачал),но нечего подобного для работы с XML нет.Ребята,может у кого есть программа с кодом для работы с XML ?
Буду очень признателен,если кто то опытный сделает что то похожее.
Спасибо.
И так,во всём,как хотите,чтобы люди поступали с вами,так и вы поступайте с ними...
Матфея 7:12

Nazarey
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 120
Зарегистрирован: 29.06.2007 (Пт) 0:04

Сообщение Nazarey » 03.08.2008 (Вс) 20:35

По ходу возник еше один вопрос.Как сделать,чтоб в TextBox выделялось определенное слово?
И так,во всём,как хотите,чтобы люди поступали с вами,так и вы поступайте с ними...
Матфея 7:12

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 04.08.2008 (Пн) 7:25

Nazarej писал(а):По ходу возник еше один вопрос.Как сделать,чтоб в TextBox выделялось определенное слово?
Найти и выделить. Найти - руками или EM_FINDTEXT, выделить - SelStart, SelLength.
Весь мир матрица, а мы в нем потоки байтов!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 04.08.2008 (Пн) 11:04

Nazarej

Какой еще тебе нужен код для работы с XML кроме того что я написал? :)
I don't understand. Sorry.

Nazarey
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 120
Зарегистрирован: 29.06.2007 (Пт) 0:04

Сообщение Nazarey » 04.08.2008 (Пн) 12:15

Дак уже всё,разобрался)
В начале испугался ,что не смогу разобраться,показалось слишком сложным-теперь полный порядок.
Спасибо )
И так,во всём,как хотите,чтобы люди поступали с вами,так и вы поступайте с ними...
Матфея 7:12


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

    TopList