Как удалить элемент управления?

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

Как удалить элемент управления?

Сообщение avor » 14.05.2003 (Ср) 16:13

На форме есть массив текстовых окон, количество которых должно меняться. Добавляются через Load они без проблем, а вот удаляться через Unload не хотят, выходит ошибка.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Re: Как удалить элемент управления?

Сообщение Cyrax » 14.05.2003 (Ср) 16:25

avor писал(а):На форме есть массив текстовых окон, количество которых должно меняться. Добавляются через Load они без проблем, а вот удаляться через Unload не хотят, выходит ошибка.

какая именно?
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

avor
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.04.2003 (Чт) 13:05

Сообщение avor » 14.05.2003 (Ср) 17:53

Run-time error '365'
Unable to unload within this context

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 14.05.2003 (Ср) 17:58

avor писал(а):Run-time error '365'
Unable to unload within this context


а код можно посмотреть? потому что, так не очень понятно, как ты их грузиш/выгружаеш
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 14.05.2003 (Ср) 18:42

это помойму запарка с кодом, видимо обращается к несуществующему контролу... :lol:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

avor
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.04.2003 (Чт) 13:05

Сообщение avor » 15.05.2003 (Чт) 11:39

Весь код написать сложновато, так какдобавляются эти контролы в одной части программы, а убираютя в другой, но даже если пробую так:
На форме есть одна метка с индексом ноль, далее добавляю по мере надобности
Dim WorkLabel as Label
n = Int((i - 1) / 7) * 4 + j
Set WorkLabel = LblCaption(n)
Load WorkLabel
WorkLabel.Caption = NCaption
WorkLabel.Left = LStartTabl - WorkLabel.Width - 40
WorkLabel.Height = RowHeight
WorkLabel.Top = HStartTabl + Int((i - 1) / 7) * RowHeight * 5 + RowHeight * j + 50
WorkLabel.FontSize = FontNum
WorkLabel.Visible = True
Метка добавлена, все отлично, теперь сразу пробую убрать
Unload LblCaption(n)
и здесь вылезает ошибка

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 15.05.2003 (Чт) 14:45

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

делай так

Код: Выделить всё
Option Explicit

Dim lblCount As Integer ' количество надписей
Dim AllLabel() As Integer ' а в этом массиве будем отслеживать загруженные надписи.

Private Form_Load()
    lblCount = 0
End Sub

Private Sub AddLabel
    Dim OpenPos As Integer ' будем искать свободный индекс для надписи
    Dim i As Integer
    If lblCount > 0 Then
        For i = 1 To lblCount
            If AllLabel(i) = 0 Then ' если индекс свободен
                OpenPos = i
                Exit For
            End If
        Next i
    End If

    If OpenPos = 0 Then
        OpenPos = lblCount + 1
        lblCount = lblCount + 1
        ReDim Preserve AllLabel(1 To lblCount)
    End If

    AllLabel(OpenPos) = 1

    Load lbl(OpenPos)

    тут инициализируй новую лэблу
   
    lbl(OpenPos).Visible = True
End Sub


Private Sub RemoveLabel(Index As Integer)
    Unload lbl(Index)
    AllLabel(Index) = 0 ' освобождаем индекс
End Sub
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

avor
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 24.04.2003 (Чт) 13:05

Сообщение avor » 15.05.2003 (Чт) 17:09

Да нет, лэбл какой и положено. Знаешь, что мне кажется? Что процедура у меня стоит как раз на те события, на которых Unload почему-то не работает:Form_resize() и ComboBox_Click()!


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

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

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

    TopList