Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пожааалстаа! Подскажите как работать с TreeView!

478
20 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Для каждого товара есть поля Code (код товара) и MasterCode (код группы, совпадает с кодом группы товаров)...

Пример:

WareName WareCode WareMasterCode
Товары 0
Кофе 1 0
Чибо 2 1
Элит 3 1
..................................

...надо создать древовидную структуру...
...если кто знает - помогите...
...если TreeView для этого не подходит, то подскажите другой вариант...

Пишу в VB6
Страницы:
266
20 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
Для каждого товара есть поля Code (код товара) и MasterCode (код группы, совпадает с кодом группы товаров)...

Пример:

WareName WareCode WareMasterCode
Товары 0
Кофе 1 0
Чибо 2 1
Элит 3 1
..................................

...надо создать древовидную структуру...
...если кто знает - помогите...
...если TreeView для этого не подходит, то подскажите другой вариант...

Пишу в VB6



Я точно сейчас не помню, но, по-моему, я для этого ListView использовал. У TreeView, по-моему, тоже есть свойства соответствующие, но, увы, не могу сейчас с ним помочь:{

478
20 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Табличка смазалась:)

WareName|WareCode|WareMasterCode|
Товары..|0.......|..............|
Кофе....|1.......|0.............|
Чибо....|2.......|1.............|
Элит....|3.......|1.............|

Надеюсь так понятнее...
...нашел одно свойство, называется "TreeView1.Nodes"
Это не оно?
Если оно, то что значат его параметры (читай "что и куда вставлять")?
478
20 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Неужели никто раньше этого не делал???P(
478
20 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Ну подскажите хоть альтернативное решение!!!
267
20 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by XtreamAll
Ну подскажите хоть альтернативное решение!!!



Я на экселе делал. Красотища...

478
20 ноября 2003 года
XtreamAll
279 / / 01.10.2003
В смысле на VBA?
Если да, то как?
267
20 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by XtreamAll
В смысле на VBA?
Если да, то как?



В Экселе есть такое понятие - Структура.
В меню - Данные/Группа и структура...
И я через макрос делал самостоятельно такое деревце. Многие про структуру не знают, поэтому увидя результат, приходят в восторг. :)

478
20 ноября 2003 года
XtreamAll
279 / / 01.10.2003
:{ Ну я же не это имел ввиду...
такие структуры я уже проходил...
мне надо на форме...
...и контролы нужные есть, но я пока не знаю как ими пользоваться:(
267
20 ноября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by XtreamAll
:{ Ну я же не это имел ввиду...
такие структуры я уже проходил...
мне надо на форме...
...и контролы нужные есть, но я пока не знаю как ими пользоваться:(



Да я так и понял... Но подумалось "а вдруг?"... :)

478
21 ноября 2003 года
XtreamAll
279 / / 01.10.2003
To mhaturov:
насчет TreeView - может таки вспомнишь?
если будет свободное время...
...ато проект горит, а без TreeView в списках товаров разобраться не реально:{

:o прайс ~ 3000 позиций:o
266
21 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
To mhaturov:
насчет TreeView - может таки вспомнишь?
если будет свободное время...
...ато проект горит, а без TreeView в списках товаров разобраться не реально:{

:o прайс ~ 3000 позиций:o



Подождёшь денёк - другой? Ей Богу, я бы с радостью хоть сейчас, но у меня тут такая запарка...:{ Только раскидаюсь с делами - вышлю описание. Чуто-чуть погоди. А пока поройся со свойствами TreeView. Уточни ещё, откуда подгружаются товары? Из БД? Хотя, по большому счёту, без разницы...

478
21 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Пару дней подожду...
...пока другие функции попишу:)

Данные подгружаются в рекордсет, а уже из него в контрол...

...пасибо что не остался равнодушен к проблеме ближнего:)
266
21 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
Пару дней подожду...
...пока другие функции попишу:)

Данные подгружаются в рекордсет, а уже из него в контрол...

...пасибо что не остался равнодушен к проблеме ближнего:)



Слушай, чтобы тебе время не терять, спроси ещё тут(ссылки на страницы сайтов - сам там найдёшь нужные форумы). Может, там помогут. Если найдёшь ответ - сообщи сюда, ладно.
http://www.rsdn.ru/forum/?group=vb
Кроме того:
http://www.relib.com/articles/articles.asp?cid=3
http://www.vbrussian.com/conf/
P.S. Еще адрес (вернее, уточнение одного из них):
http://www.relib.com/forums/forum.asp?tp=11

239
22 ноября 2003 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by XtreamAll
Для каждого товара есть поля Code (код товара) и MasterCode (код группы, совпадает с кодом группы товаров)...

Пример:

WareName WareCode WareMasterCode
Товары 0
Кофе 1 0
Чибо 2 1
Элит 3 1
..................................

...надо создать древовидную структуру...
...если кто знает - помогите...
...если TreeView для этого не подходит, то подскажите другой вариант...

Пишу в VB6



Все просто %) Даже TreeView не надо! решение на самом деле элементарное.... %)

Но только у себя я этого примера не нашел... могу выложить завтра...

478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Какое решение то?
239
22 ноября 2003 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by XtreamAll
Какое решение то?



Начт так. Создаете родительский э-т простым add:

Set LI = ListView.ListItems.Add(, "E2", "name", , IconN)

Потом чтобы создать у этого э-та дочерний, делаете так:

LI.ListSubItems.Add(параметры)

478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Я уже нарыл информацию по заполнению TreeView...
...так что, если кому надо - обращайтесь...

...появилась другая проблема:

как определить глубину вложений?

то есть глубина вложений ветви неизвестна...
478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Неее...
....это я прогнал:D
...более умный (по-моему) вопрос:
как определить имеется ли Node с заданным ключем?
239
22 ноября 2003 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by XtreamAll
Неее...
....это я прогнал :D
...более умный (по-моему) вопрос:
как определить имеется ли Node с заданным ключем?



Хе! %)

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

Надо делать он еррор резюм некст и присваивать любому ноду искмый элементдерева или листа. Потом проверять если еггог не ноль, то нули его и делай нужные выводы. Если надо просто удалить, под он еррор резюм некст удаляй. если его нет, он просто попытается выкинуть ошибку, а мы это предотвратим. :angel:

478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
:) Мыслим в одном направлении...
...но что то у меня не срабатывает Он Еррор...
...где его вставить, чтобы он работал?

Заполнение "Дерева" у меня в Private Function...
...может ее сделать Public?
478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
:devil: я в шоке!!!

Сегодня день какой то не такой?
Он Еррор всегда стабильно работал, а сегодня...:{
266
22 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
:devil: я в шоке!!!

Сегодня день какой то не такой?
Он Еррор всегда стабильно работал, а сегодня...:{



А что прописано в OnError? Кстати, OnError Resume Next лучше вообще не использовать - черевато. Поэтому, где можно, лучше обойти это. Попробуй подключить тот обработчик, который описан в http://forum.codenet.ru/showthread.php?threadid=13626 (вопрос про подстановку в комбобокс). Этот обработчик подключается, как глобальная процедура, затем пишешь OnError Goto <Имя метки>. Метку помещаешь после досрочного завершения процедуры (Exit Sub, Exit Function и т.д.) В метке пишешь вызов этого обработчика, и передаёшь ему номер и дескрипшен ошибки и имя модуля, где она возникла. После этого, в случае возникновения ошибки, программа не прерывается (если, конечно, ошибка не критичная (не описана переменная, например и присутствует Option Explicit в заголовке модуля)). Обработчик выдаёт сообщение об ошибке и пишет информацию в лог-файл, указанный в его коде (в примере это - Anketa.log). Потом можешь просто брать лог-файл и анализировать, какая ошибка в каком модуле возникла. Если модуль большой, можно создать в нём меточки, значения которых будет изменяться после обределённых частей кода, и в модуль передавать, помимо имени процедуры и модуля, значение меточки. Потом по этому значению лёгко найти место ошибки. Ну сам посмотришь, как я его вызываю - в том разделе форума все примеры есть.
Кстати, какая ошибка у тебя не обрабатывается? OnError не все подряд ошибки может обработать.

266
22 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
:devil: я в шоке!!!

Сегодня день какой то не такой?
Он Еррор всегда стабильно работал, а сегодня...:{



По поводу поиска ключа. Есть очень хитрый и прикольный вариант. Можно айтемы при заполнении элемента дублировать в коллекции, но в ней Имя Айтема - ключ, а ListIndex - параметр ключа. Если имена айтемов дублируются, прибавлять к дублям константы. Затем из коллекции просто вытягиваешь значение по имени айтема и получаешь его List Index :) . Ну а если айтемов мало - нечего заморачиваться - ищи это дело в цикле и не парься.:D

478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
В кратце расскажу что я собственно делаю:

Структура в базе хранится как (имя) (код) (код группы)...
...у кореня дерева код группы=Null...
...я перегружую функцию, кот-я создает ноды (зачем что то искать, если просто можно несколко раз ее перегрузить и добраться до концов ветвей?)
...если при очередной перегрузке не создан ни один нод, то Flag=False - все, дерево построено!
...фигня в том, чтобы обработать ситуацию, когда очередной нод не может найти свой Parent (кстати по этому поводу и ошибка выдается №35601)....

...ну как, полный бред, или можно реализовать? P(
266
22 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
В кратце расскажу что я собственно делаю:

Структура в базе хранится как (имя) (код) (код группы)...
...у кореня дерева код группы=Null...
...я перегружую функцию, кот-я создает ноды (зачем что то искать, если просто можно несколко раз ее перегрузить и добраться до концов ветвей?)
...если при очередной перегрузке не создан ни один нод, то Flag=False - все, дерево построено!
...фигня в том, чтобы обработать ситуацию, когда очередной нод не может найти свой Parent (кстати по этому поводу и ошибка выдается №35601)....

...ну как, полный бред, или можно реализовать? P(



Попробуй так:
Private Sub EEE()
On Error Goto ErrHnd
...............
...............
...............
Exit Sub
ErrHnd:
If Err.Number = 35601 THEN
Err.Clear
Resume Next
ELSE
Err.Raise Err.Number, Err.Dascription
End IF
End Sub

478
22 ноября 2003 года
XtreamAll
279 / / 01.10.2003
On Error ваще работать не хочет...
...я уже туда MsgBox засунул - никакой реакции...
...только ошибки выдает...
239
22 ноября 2003 года
Dolonet
1.7K / / 20.05.2000
Вообще при удалении э-та дерева его подэ-ты не удаляются, поэтому требуется рекурсивный обход...

Да! Ничего опасного в он еррор реюм некст нет! надо только перед отключением проверить err.number и задать его нулем....
266
25 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Dolonet
Вообще при удалении э-та дерева его подэ-ты не удаляются, поэтому требуется рекурсивный обход...

Да! Ничего опасного в он еррор реюм некст нет! надо только перед отключением проверить err.number и задать его нулем....



Ага, а потом гадать, почему прога "глючит":D Я сталкивался с такой бедой. Пусть лучше выдаёт сообщение об ошибке - хоть будешь знать, где "глюк", а то потом забудешь, что есть тонкие места, и повесишься, ища место ошибки. Лучше писать так, чтобы ошибок вообще не могло возникать. А на On Error можно вешать обработчик конкретной ошибки. Например:
On Error GoTo ErrHng:
.....................
.....................
.....................
Exit Sub
ErrHng
If Err.Number = XXX
Resume [NEXT]
ELSE
Err.Raise Err.Number, <Имя процедуры>, Err.Description
End IF
End Sub

239
26 ноября 2003 года
Dolonet
1.7K / / 20.05.2000
Цитата:
Originally posted by mhaturov


Ага, а потом гадать, почему прога "глючит":D Я сталкивался с такой бедой. Пусть лучше выдаёт сообщение об ошибке - хоть будешь знать, где "глюк", а то потом забудешь, что есть тонкие места, и повесишься, ища место ошибки. Лучше писать так, чтобы ошибок вообще не могло возникать. А на On Error можно вешать обработчик конкретной ошибки. Например:
On Error GoTo ErrHng:
.....................
.....................
.....................
Exit Sub
ErrHng
If Err.Number = XXX
Resume [NEXT]
ELSE
Err.Raise Err.Number, <Имя процедуры>, Err.Description
End IF
End Sub



Я именно об этом и говорил... но удалять субобъекты надо! Если их станет больше 65535-ти то жди сюрпризов, и вообще память почем зря переполнять нехорошо...

478
27 ноября 2003 года
XtreamAll
279 / / 01.10.2003
здрасте!

на ваших примерах я понял свою ошибку:
использовать ON ERROR надо!
а я это дело игнорировал...:{
поэтому вдвойне неприятно, что ON ERROR у меня работать не хочет:(

Есть предположения, что я делаю не так?
266
27 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
здрасте!

на ваших примерах я понял свою ошибку:
использовать ON ERROR надо!
а я это дело игнорировал...:{
поэтому вдвойне неприятно, что ON ERROR у меня работать не хочет:(

Есть предположения, что я делаю не так?



Напиши пример кода, в котором не работает On Error

478
27 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by mhaturov


Напиши пример кода, в котором не работает On Error



sub main()

ON ERROR GOTO Err

******************
******************

Exit Sub

Err:
MsgBox "Error!"

end sub

266
27 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll


sub main()

ON ERROR GOTO Err

******************
******************

Exit Sub

Err:
MsgBox "Error!"

end sub



Err - это объект VB, ссылка на объект коллекции ошибок. Попробуй метку по-другому обозвать.

478
27 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Цитата:
Originally posted by mhaturov


Err - это объект VB, ссылка на объект коллекции ошибок. Попробуй метку по-другому обозвать.



Это я для примера Err использовал...
...а вообще из ваших примеров брал.

266
27 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll


Это я для примера Err использовал...
...а вообще из ваших примеров брал.



Хорошо, а в теле процедуры какой код? И в каком месте валится, конкретно (выдели его как-нибудь).

478
27 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Я в разные функции вставлял, и везде ноль реакции...
...например:

sub main()

ON ERROR GOTO Errrr

For...
************************
NodeX=Nodes.Add(....)
************************
Next...

Exit sub

Errrr:
MsgBox "Error!"

end sub

, при отсутствии Parent Node выдавало ошибку №35601, как я уже писал выше...
266
27 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
Я в разные функции вставлял, и везде ноль реакции...
...например:

sub main()

ON ERROR GOTO Errrr

For...
************************
NodeX=Nodes.Add(....)
************************
Next...

Exit sub

Errrr:
MsgBox "Error!"

end sub

, при отсутствии Parent Node выдавало ошибку №35601, как я уже писал выше...



Подозреваю, что тут рекурсивная ошибка. Сделай так:
Private Sub XXX
On Error Goto ErrHnd

Exit sub
ErrHnd:
debug.Print Err.Number
Resume Next
End Sub

Затем запусти это дело. Получишь ошибку. Посмотришь, какой номер тебе отдебажило. Затем в ErrHng добавляешь

Private Sub XXX
On Error Goto ErrHnd

Exit sub
ErrHnd:
Select Case Err.Number
Case <Номер отдебаженой ошибки>
Err.Number = 0
Err.Clear
Resume next
Case Else
debug.Print Err.Number
Resume Next
end Select
End Sub

Затем таким образом отлавливаешь номер 2 рекурсивной ошибки. Добавляешь её в обработчик
Private Sub XXX
On Error Goto ErrHnd

Exit sub
ErrHnd:
Select Case Err.Number
Case <Номер отдебаженой ошибки>
Err.Number = 0
Err.Clear
Resume next
Case <Номер отдебаженой ошибки №2>
Err.Number = 0
Err.Clear
Resume next
Case Else
debug.Print Err.Number
Resume Next
end Select
End Sub

Если номера ошибок в этом коде изменяются, то, значит, тут одна ошбка тянет другую. Тебе нужно всю цепочку этих ошибок включить в обработчик, иначе получается так: возникает ошибка, ты её обрабатываешь, но она успевает вытянуть следующую и т.д. Кроме того. On Error НЕ ВСЕГДА может работать с коллекциями из внешнего модуля. Возможно, это твой случай. Я, как немного освобожусь, подумаю над твоей проблемой.

478
27 ноября 2003 года
XtreamAll
279 / / 01.10.2003
Большое спасибо за ответ...
...буду разбираться...
...как твой проект? закончил?
266
27 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by XtreamAll
Большое спасибо за ответ...
...буду разбираться...
...как твой проект? закончил?


К сожалению, ещё парюсь...:{

478
27 ноября 2003 года
XtreamAll
279 / / 01.10.2003
;) Я тоже ...
...уже почти доделал, показал шефу, а он мне:
"Сильно заумно" & "Надо сделать проще" (читай "тупее")...
...и такое мне рассказал:devil:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог