Ошибка выполнения '16' Выражение слишком сложное

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Ошибка выполнения '16' Выражение слишком сложное

Сообщение arthur2 » 15.01.2009 (Чт) 19:17

Что за фигня происходит? На строке:
Код: Выделить всё
popHtml.icTT.height = 16 * koofIc \ 10

бейсик чихает и говорит, мол, выражение слишком сложное.
popHtml - форма
icTT - image
koofIc as integer, в момент остановки в нём число 20

Самое забавное, что после F5 бейсик забывает, что нашёл "ошибку" и проходит это место как ни в чём не бывало. А пошагово он и вовсе её не замечает. Что бы это могло быть и как это можно побороть?
Артур
 
   

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: Ошибка выполнения '16' Выражение слишком сложное

Сообщение Йода » 15.01.2009 (Чт) 20:31

Симитировать ошибку я не смог :roll: . Составленый по твоему описанию код:

Код: Выделить всё
Private Sub Command1_Click()
    Dim koofIc As Integer
    koofIc = 20
    popHtml.icTT.Height = 16 * koofIc \ 10
End Sub

ошибок не вызывает.
З.Ы. Что такое koofIc и как он вычисляется?
Sub or Function not defined

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Ошибка выполнения '16' Выражение слишком сложное

Сообщение arthur2 » 15.01.2009 (Чт) 21:18

Всё! я нашёл :)

Йода
Симитировать ошибку я не смог :roll: . Составленый по твоему описанию код:

Код:
Private Sub Command1_Click()
Dim koofIc As Integer
koofIc = 20
popHtml.icTT.Height = 16 * koofIc \ 10
End Sub

ошибок не вызывает.

Симитировать мне тоже не удаётся, но у меня этот код выполняется, когда форма ещё не загружена. И даже сложных выражений не нужно - достаточно просто popHtml.icTT.Height = koofIc, чтобы бейсик заругалось :)

Пошагово по Shif+F8 проходилось без вопросов... А как пошёл по просто F8, тут-то всё и выяснилось - я вошёл в Form_Initialize :)

Вероятно, там, в инициализации, есть какая-то хитрая перекрёстная ссылка, и возникает какая-нибудь замысловатая рекурсия, через которую бейсику с ходу не получается продраться. Я выяснять не стал, а просто записал:
Код: Выделить всё
if popHtml.icTT.Height >0 then popHtml.icTT.Height = 16 * koofIc \ 10

При проверке условия форма загружается и дальше уже глюков не возникает.
Артур
 
   

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: Ошибка выполнения '16' Выражение слишком сложное

Сообщение Йода » 15.01.2009 (Чт) 22:04

Симитировать ошибку по прежнему не могу. Работает и так:

Код: Выделить всё
Private Sub Form_Initialize()
    Dim koofIc As Integer
    koofIc = 20
    Form1.Image1.Height = koofIc
End Sub

и вот так:

Код: Выделить всё
Sub main()
    Dim koofIc As Integer
    koofIc = 20
    Form1.Image1.Height = 16 * koofIc \ 10
    Form1.Show
End Sub

У меня всё без ошибок. Что я делаю неправильно? :lol:

З.Ы. Интересуюсь, потому что сам такую ошибку не получал ни разу. А про рекурсию я ничего не понял... :roll:
Sub or Function not defined

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Ошибка выполнения '16' Выражение слишком сложное

Сообщение arthur2 » 15.01.2009 (Чт) 23:39

Вообще-то мне лениво (да и некогда сейчас) точнее выискивать, потому что от глюка я избавился, а в чём он был, интуитивно понял. А симитировать я и сам не могу (попытался несколько раз).

Там я сейчас посмотрел: у формы вообще нет процедуры инициализации, но на форме лежит несколько разных контролов, и именно в их инициализацию я вхожу при первом обращении к этому .height А в каждом контроле при инициализации и чтении свойств есть ещё и инициализации нескольких классов... В общем, много кода.

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

Вообще, это не ошибка как таковая - ведь после компиляции ошибки нет. Да и бейсик это место проходит, если перед ним приостановится. А с разгону не может - видимо, где-то получается действительно "слишком сложное выражение"
Артур
 
   

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: Ошибка выполнения '16' Выражение слишком сложное

Сообщение Йода » 16.01.2009 (Пт) 0:29

... у формы вообще нет процедуры инициализации...

У формы есть процедура инициализации - Private Sub Form_Initialize()
...на форме лежит несколько разных контролов, и именно в их инициализацию я вхожу...

Никогда не видел у текстбокса (к примеру) процедуру инициализации. :roll:
...классов, объявленных в этих контролах...

Ничего не понял. :oops: Ты на VB6 пишешь?
Sub or Function not defined

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Ошибка выполнения '16' Выражение слишком сложное

Сообщение arthur2 » 16.01.2009 (Пт) 2:49

Не знаю, может я просто тупо объясняю :oops: Как всегда, чего-то напутал с терминологией?

У моей формы не обрабатывается событие инициализации. Мне это было не нужно (предпочитаю Form_Load, чтобы не сталкиваться с глюками, когда обращаешься к чему-то, чего ещё нет)

На форме лежат самописные контролы - usercontrol, у которых, слава богу, это событие есть. И я его обрабатываю. UserControl_Initialize . Там ещё до кучи вызывается UserControl_ReadProperties, внутри которой устанавливается новый размер, а значит выскакивает ещё и UserControl_Resize :)

В контролах (юзерконтролах) объявлено некоторое количество классов типа dim myCls as new myCls, которые тоже хотят инициироваться: Class_Initialize.

Form_Load, конечно, тоже вызывается, но после того, как проинициируются все контролы, и я до туда просто не дошагал - терпежу не хватило.

В какой из этих матрёшек что зацикливается, не знаю - не доразбирался.
Артур
 
   


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 66

    TopList