Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Контейнеры и БОООЛЬШОЙ глюк Добавлено: 03.02.06 17:23  

Автор вопроса:  Fever
У меня на форме находится picCheat с индексом 0. Внутри него есть всякие элементы управления. Из кода с помощью инструкции Load я создаю еще несколько экземпляров picCheat. Однако содержимое picCheat не копируется. Тогда с помощью того же Load'a я создаю все эти элементы. Но так как они создаются на форме, необходимого эффекта достичь не удается. Когда я попробовал решить эту проблему с помощью API SetParent, перемещение наконец произошло и программа пришла к человеческому виду. Однако при ее завершении(в том числе с помощью End) я наблюдал следующий эффект: "Visual Basic 6 выполнил..."
В чем причина этого наглого глюка и как с ентим боротся? Если кто знает другие рациональные методы решения, просьба откликнуться.
P.S. Ассемблерные методы отладки ничего не дали.

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #1
Добавлено: 03.02.06 18:09
Создай UserControl, помести эти элементы управления на него. А там и Load прекрасно их клонировать будет.

Ответить

Номер ответа: 2
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #2 Добавлено: 03.02.06 18:23
THanks, но этот вариант я хотел бы избежать. Придется юзать Form и SetParent. Вопрос остается открытым до завтра.

Ответить

Номер ответа: 3
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #3
Добавлено: 03.02.06 18:30
А зачем SetParent? Может проще пересчитать координаты и поместить его поверх нужного пикчера?

Ответить

Номер ответа: 4
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #4 Добавлено: 03.02.06 18:51
Кхм... Так в том то и вся трабла что там ТАКИЕ координаты, что глаза на лоб лезут. Там в picContainer создается список из picCheats. А в начале есть еще и picHeader. Я уже молчу про всевозможные отступы, ресайз формы и изменение размера picCheats. Короче, если хочешь дам проект посмотришь.

Ответить

Номер ответа: 5
Автор ответа:
 Tamplier



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #5 Добавлено: 03.02.06 18:51
ага и
Control.ZOrder = vbBringWindowToTop

а у псевдородителя - наоборот на всяк случай...

Ответить

Номер ответа: 6
Автор ответа:
 Tamplier



ICQ: 298742928 

Вопросов: 58
Ответов: 340
 Профиль | | #6 Добавлено: 03.02.06 18:53
а на каждую процедуру - все внимательно отслеживать и перемещать / -рисовывать / -другойвариант.

Ответить

Номер ответа: 7
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #7 Добавлено: 03.02.06 18:55
Проблема упирается еще и в быстродействие

Ответить

Номер ответа: 8
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #8
Добавлено: 03.02.06 19:00
Так в том то и вся трабла что там ТАКИЕ координаты, что глаза на лоб лезут.
Какая разница какие там координаты? .top, .left
Никаких проблем.
Делаешь команду Move для контролов, которая сразу все пересчитает.
С ресайзами, конечно, посложнее. Но ведь на ресайзах так и так надо их двигать.
Быстродействие, конечно, не выиграет.

Ответить

Номер ответа: 9
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #9
Добавлено: 03.02.06 19:01
Проект можешь дать, но у меня сейчас VB нет под рукой...

Ответить

Номер ответа: 10
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #10 Добавлено: 03.02.06 19:02
Tamplier, а как ты смотришь на "дать проект"?

Ответить

Номер ответа: 11
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #11
Добавлено: 03.02.06 22:44
Sub MoveControl(Ctl as Control, byval Left as long, byval Top as long, byval Width as long, byval Height as long)
dim i as long
i = ctl.index
top=top+picture1(i)
left=left+picture1(i)
ctl.move left,top,width,height
end sub


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

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

Sub MoveContainer(Ctl as Control, byval Left as long, byval Top as long, byval Width as long, byval Height as long)
Dim i as long
Dim dx as long, dy as long
dx = Top - Ctl.Top
dy = Left - Ctl.Left
i = Ctl.index

И тут к сожалению не вижу другого хорошего способа, кроме перечисления всего содержимого, и перемещения его на dx,dy
Label1(i).Move Label1(i).Left+dx, Label1(i).top+dy
...

Ctl.Move Left, Top, Width, Height
End Sub


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

Ответить

Номер ответа: 12
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #12 Добавлено: 04.02.06 14:45
Victor, давай я те прогу брошу?! Посмотришь и на мув, и на ресайз...

Ответить

Номер ответа: 13
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #13
Добавлено: 05.02.06 13:29
Бросай, я не против. Вот только начать ее обработку смогу только когда обратно в питер приеду, здесь в москве vb не оказалось. Это случится 8-го фев.

Ответить

Номер ответа: 14
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #14
Добавлено: 06.02.06 03:10
Попробуй перестать завершать работу через End и в процедуре закрытия формы делай Unload элементов и приравнивание к nothing.

Ответить

Номер ответа: 15
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #15
Добавлено: 06.02.06 03:13
Ещё попробуй использовать SetParent до Visible=True

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам