Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Пт Июн 05, 2015 6:51 am Заголовок сообщения: Диалоги и массивы |
|
|
Добрый день.
Обобщил Ваше мнение по теме MultiListBox и массивы.
Получил нужное для себя решение.
MultiListBox здесь наполняется числами.
Может и Вам будет интересно использовать это в своей практике.
Вот код:
Include "MAPBASIC.DEF"
Include "Menu.def"
Declare Sub Main
Declare Sub FirstStep
Dim vd() As String
Sub Main
dim nVd, nID as integer,
w as string
nVd = 34 ' размер массива для MultiListBox
reDim vd(nVd)
nID = 1
w = "--" ' не всегда будет необходимость учитывать
' этот параметр в расчетах
Do while nID <= nVd
ReDim vd(Ubound(vd)+1)
vd(nID) = w
w = Str$(nID)
nID = nID+ 1
Loop
Dialog
Title "Диалог"
Width 235
Height 140
Control StaticText
Position 10, 10
Title "Параметр"
Control MultiListBox
Title From Variable vd
Value 1
Position 10,20
Width 35
Height 90
ID 1
Control OkButton
Position 65, 115
ID 2
Calling FirstStep
Title "Ok"
Enable
Control CancelButton
Position 135, 115
Title "Cancel"
End Sub
'=======
Sub FirstStep
Dim q1, q11 As String,
nID As Integer
For nID = 1 To UBound(vd)
q1 = ReadControlValue(1)
q11 = vd(q1)
Note "Параметр " + q11
Next
End Sub
Вот какая тут закавырка.
Выражение
Note "Параметр " + q11
показывает поочередно все выбранные в окне диалога значения.
Собственно, то что нужно, но после этого сразу же появляется сообщение
"Индекс массива выходит за заданные пределы"
и указывается строка, где записано
q11 = vd(q1)
Соответственно, далее программа не работает.
Помогите пожалуйста разобраться что здесь не так и как с этим бороться.
Спасибо. |
|
Вернуться к началу |
|
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Пт Июн 05, 2015 3:27 pm Заголовок сообщения: |
|
|
Непонятно какую задачу решает код. Если вы хотите показать выбранные в списке значения, то это может выглядеть как то так:
Include "MAPBASIC.DEF"
Declare Sub Main
Declare Sub lbClick
Dim vd() As String
dim fldInd() as smallint
Sub Main
dim nVd,i as smallint
dim ss as string
nVd = 34 ' размер массива для MultiListBox
reDim vd(nVd)
vd(1)="--"
For i = 2 To nVd
vd(i)=Str$(i-1)
Next
Dialog
Title "Диалог"
Control StaticText
Title "Параметр"
Control MultiListBox
Title From Variable vd
Value 1
ID 1
Control OkButton
Title "Ok"
Calling lbClick
Control CancelButton
Title "Cancel"
If CommandInfo(CMD_INFO_DLG_OK)=true Then
ss=""
For i = 1 To ubound(fldInd)-1
ss=ss & vd(fldInd(i)) & chr$(10)
Next
note ss
End If
End Sub
'Обработчик события (клик мышью на элементе Ok)
Sub lbClick
dim ind,j as smallint
j=0
Do
ind = ReadControlValue(1)
j=j+1
redim fldInd(j)
fldInd(j)=ind
if ind=0 then exit do end if
Loop
end sub
PS. В вашем примере поставьте в цикл print q1 и увидите что последний индекс определяется как 0 что для МВ недопустимо. |
|
Вернуться к началу |
|
|
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Пт Июн 05, 2015 4:09 pm Заголовок сообщения: |
|
|
Большое спасибо за Ваш пример. |
|
Вернуться к началу |
|
|
|