Страницы: 1
RSS
Удаление объекта в форме
 
Доброе утро!  
Подскажите, пожалуйста:  
 
Вопрос по VB 6.0 (близко к ВБА - поэтому может кто знает?)  
 
Есть форма. В ней есть picturebox. Как удалить picturebox в коде. Метод delete не работает...
Audiatur et altera pars
 
НЕЛЬЗЯ удалить элемент, добавленный во время проектирования формы.  
 
Еслиже элемент помещён на форму в runtime, то можно: Form1.Controls.Remove "NewButton"  
 
Читаем здесь:  http://forum.vingrad.ru/faq/topic-158085.html  
 
И вообще, зачем удалять, когда можно просто спрятать? ( .visible = FALSE )
 
Есть Treeview.  
Напротив каждой ветки надо создавать (в коде) PictureBox, если ветка отображена.  
 
Вот код создания ветвей и PIctureBox.  
 
Ругается, когда идет повторное создание объекта в форме. Говорит - такой уже есть. Значит надо сначала все имеющиеся удалять, потом создавать заново...  
 
Но опять ругается. Посмотрите, пожалуйста, что не так... Очень нужно...  
 
Option Explicit  
Public y As Node  
Public n As Long  
Public m As Variant  
Public PBX As PictureBox  
 
Sub SostavTree()  
 
Menu.TreeView1.Nodes.Add , , "Финансовая отчетность", "Финансовая отчетность"  
 
   Menu.TreeView1.Nodes.Add "Финансовая отчетность", tvwChild, "Бухгалтерский баланс", "Бухгалтерский баланс"  
 
   Menu.TreeView1.Nodes.Add "Финансовая отчетность", tvwChild, "Отчет о прибылях и убытках", "Отчет о прибылях и убытках"  
         
   Menu.TreeView1.Nodes.Add "Финансовая отчетность", tvwChild, "Отчет об изменениях капитала", "Отчет об изменениях капитала"  
     
   Menu.TreeView1.Nodes.Add "Финансовая отчетность", tvwChild, "Отчет о движении денежных средств", "Отчет о движении денежных средств"  
     
   Menu.TreeView1.Nodes.Add "Финансовая отчетность", tvwChild, "Приложение к бухгалтерскому балансу", "Приложение к бухгалтерскому балансу"  
     
Menu.TreeView1.Nodes.Add , , "В разрабоке", "В разрабоке"  
 
   Menu.TreeView1.Nodes.Add "В разрабоке", tvwChild, "Первый", "Первый"  
 
   Menu.TreeView1.Nodes.Add "В разрабоке", tvwChild, "Второй", "Второй"  
     
   'Call Znachki  
     
 
End Sub  
 
 
 
 
 
Sub Znachki()  
 
m = 0  
n = 1  
 
 
 
For Each PBX In Menu.Controls  
 
Menu.Controls.Remove "VB.PictureBox", "PBX" & n  
 
Next PBX  
 
 
Set PBX = Menu.Controls.Add("VB.PictureBox", "PBX" & n)  
 
   For Each y In Menu.TreeView1.Nodes  
                 
       m = m + 240  
       n = n + 1  
         
       If y.Expanded = True Then  
         
             
           With PBX(n)  
               .Align = 0  
               .Appearance = 0  
               .AutoRedraw = False  
               .AutoSize = False  
               .BackColor = 16777215  
               .BorderStyle = 0  
               .Enabled = True  
               .TabIndex = 1  
         
               .Height = 255  
               .Left = 720  
               .Top = m  
               .Width = 255  
               .Picture = LoadPicture("C:\Programms\MVB\Проекты\Icons for AP\Info.gif")  
               .Visible = True  
               .ZOrder 0  
           End With  
       Else: End If  
   Next y  
 
End Sub
Audiatur et altera pars
 
Вот так получилось, но:  
- объект создается только напротив родительской ветви  
- работает только один раз, при повторном прогоне макроса пишет, что объект уже существует.  
Как удалить имеющиеся объекты чтобы потом построить новые?  
И как это сделать так, чтобы он при первой прогонке не ругался, что объектов пока еще нет?  
 
Вот последний вариант кода (я его немного подсократил):  
 
Sub Znachki()  
m = 0  
n = 1  
 
   For Each y In Menu.TreeView1.Nodes  
   m = m + 240: n = n + 1  
       If y.Expanded = True Then  
           Set PBX = Menu.Controls.Add("VB.PictureBox", "PBX" & n)  
           With PBX  
               .Align = 0: .Appearance = 0: .AutoRedraw = False: .AutoSize = False  
               .BackColor = 16777215: .BorderStyle = 0: .Enabled = True  
               .TabIndex = 1: .Height = 255: .Left = 720: .Top = m: .Width = 255  
               .Picture = LoadPicture("C:\Anton\Programms\MVB\Проекты\Icons for AP\Info.gif")  
               .Visible = True: .ZOrder 0  
           End With  
       End If  
   Next y  
 
End Sub
Audiatur et altera pars
 
> Ругается, когда идет повторное создание объекта в форме. Говорит - такой уже есть. Значит надо сначала все имеющиеся удалять, потом создавать заново...  
 
В строке Set PBX = Menu.Controls.Add("VB.PictureBox", "PBX" & n)  
контролируйте значение переменной N  
Не будет повторяющихся значений этой переменной - не будет ошибок.  
 
> Вот так получилось, но...  
Не увидев Вашего проекта VB, сложно посоветовать что-либо конкретное.  
 
Я бы рекомендовал поискать готовый элемент управления - их множество, в том числе и таких, что Вы пытаетесь сформировать.
 
Спасибо. Мне нужен Treeview с Checkbox'ами. Только чтобы их было не по одному на ветвь, а по два и более. Лучше по три!  
если у кого есть - подкиньте плиз...
 
Kindness, может Вам на соответствующем Форуме поспрашивать?
Страницы: 1
Читают тему
Наверх