запрет ввода символов в массиве из TextBox

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

запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 29.09.2016 (Чт) 23:43

Всем привет!
Имеется форма (пока это пробный рабочий набросок)

Изображение

Все TextBox на ней представляют собой массив по вертикали, т.е. в первой колонке Text1(0), Text1(1), Text1(2), во второй - Text2(0), ... и т.д. Для ограничения ввода символов в них имеется следующий код:

Код: Выделить всё
'замена точки на запятую
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
            Case 44 To 47:  KeyAscii = 44
            Case 48 To 57:  Exit Sub
            Case vbKeyBack: Exit Sub
        Case Else: KeyAscii = 0
    End Select
End Sub
'замена точки на запятую
Private Sub Text2_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
            Case 44 To 47:  KeyAscii = 44
            Case 48 To 57:  Exit Sub
            Case vbKeyBack: Exit Sub
        Case Else: KeyAscii = 0
    End Select
End Sub

'разрешение ввода определённых символов
Private Sub Text3_KeyPress(KeyAscii As Integer)
    On Error Resume Next
    Select Case KeyAscii
        Case 48 To 57, 8        ' цифры 0 - 9 и <Backspace> (эти символы всегда разрешены)
              Case Else
            KeyAscii = 0        ' остальные символы запрещены
   End Select
End Sub


Пока у меня была одна строка TextBox'ов, код работал исправно, но как только я создал массив, начались проблемы:

Изображение

Подскажите, пожалуйста, как можно назначить этот код на массив TextBox'ов, чтобы не вводить его для каждого элемента массива? Предполагается массив из 15 элеметов в каждой колонке - слишком дремучий код получится. :mrgreen:
У каждого своя истина... но каждому - своё зло!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: запрет ввода символов в массиве из TextBox

Сообщение ger_kar » 30.09.2016 (Пт) 5:52

Sha.man писал(а):Пока у меня была одна строка TextBox'ов, код работал исправно, но как только я создал массив, начались проблемы:
Все правильно, ибо для массива декларация процедур обработчиков отличается. Для процедур обработчиков массива контролов (для всех) первым аргументом передаётся индекс контрола в массиве Index As Integer и соответственно для события KeyPress обработчик должен выглядеть следующим образом
Код: Выделить всё
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
    Select Case KeyAscii
            Case 44 To 47:  KeyAscii = 44
            Case 48 To 57:  Exit Sub
            Case vbKeyBack: Exit Sub
        Case Else: KeyAscii = 0
    End Select
End Sub

Где Text1 - это элемент массива контролов
Бороться и искать, найти и перепрятать

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 30.09.2016 (Пт) 8:19

привет, Герман! :) Спасибо за ответ. Помогло. А как теперь быть с одинаковыми математическими вычислениями, но разными данными в каждой строке массива? Т.е. в строку 1 будут заполняться ширина1, длина1 и кол-во1 и для них будет рассчитываться площадь1, а во вторую строку будут вводиться другие данные и ответ, соответственно, будет тоже другой.
Код: Выделить всё
Private Sub Text1_Change(Index As Integer)
cWp = Cur(Text1(0).Text)
End Sub
Private Sub Text2_Change(Index As Integer)
cLp = Cur(Text2(0).Text)
End Sub

Private Sub Text3_Change(Index As Integer)
iNC = Cur(Text3(0).Text)
sSp = Cur(cWp * (cLp + 0.1) * iNC)
Text4(0).Text = Round(sSp, 2)
End Sub

К тому же, сейчас вместо реальной площади получаю "0", хотя раньше всё вычислялось правильно.
У каждого своя истина... но каждому - своё зло!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: запрет ввода символов в массиве из TextBox

Сообщение ger_kar » 30.09.2016 (Пт) 10:01

ger_kar писал(а):Для процедур обработчиков массива контролов (для всех) первым аргументом передаётся индекс контрола в массиве Index As Integer
Вот этот индекс и нужно использовать, он как раз для этого и передаётся.
Бороться и искать, найти и перепрятать

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 03.10.2016 (Пн) 23:55

ger_kar писал(а):Вот этот индекс и нужно использовать, он как раз для этого и передаётся.


примерно так:

Код: Выделить всё
Private Sub Text1_Change(Index As Integer)
Select Case Index
Case 0
cWp = Cur(Text1(0).Text)
Case 1
cWp = Cur(Text1(1).Text)
End Select
End Sub

Private Sub Text2_Change(Index As Integer)
Select Case Index
Case 0
cLp = Cur(Text2(0).Text)
Case 1
cLp = Cur(Text2(1).Text)
End Select
End Sub

Private Sub Text3_Change(Index As Integer)
Select Case Index
Case 0
iNC = Cur(Text3(0).Text)
Text4(0).Text = Cur(Text1(0).Text) * Cur(Text2(0).Text) * Cur(Text3(0).Text)
Case 1
iNC = Cur(Text3(1).Text)
Text4(1).Text = Cur(Text1(1).Text) * Cur(Text2(1).Text) * Cur(Text3(1).Text)
End Select
End Sub

?
У каждого своя истина... но каждому - своё зло!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: запрет ввода символов в массиве из TextBox

Сообщение ger_kar » 04.10.2016 (Вт) 6:28

Конечно нет, там блоки Select Case вообще не нужны. Все нагромождение заменяется одной строкой кода.
Код: Выделить всё
Private Sub Text1_Change(Index As Integer)
    cWp = Cur(Text1(Index).Text)
End Sub
Бороться и искать, найти и перепрятать

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 04.10.2016 (Вт) 9:03

Но у меня 15 строк идентичных данных в массиве! Вычисляться они будут не единовременно по нажатии кнопки, а по ходу ввода данных. Если делать так, как предлагаешь ты, вычисления в нижних строках будут выполняться раньше, чем в них будут введены данные — я уже так пробовал. Ведь речь идёт не о простом присвоении значений переменной, но и о вычислении этих значений по формуле.
У каждого своя истина... но каждому - своё зло!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: запрет ввода символов в массиве из TextBox

Сообщение ger_kar » 04.10.2016 (Вт) 15:07

Sha.man писал(а):Но у меня 15 строк идентичных данных в массиве!
Да какая разница, хоть 115, хоть 555, а блок Select Case там нафиг не нужен, код, который привел я будет работать для любого количества контролов, а твой код, мало того, что не выполнят ровным счетом никаких полезных действий, будет только тормозить исполнение, загромождать пространство, плюс он не является универсальным. Представь, что нужно обработать 555 контролов, и согласно твоему методу нужно будет 555 раз повторять то, что можно уложить в одну строку кода, а вдруг появится 556 контрол и твой код на нем обломится. Если у тебя что то работает не так, значит ты что то не то делаешь.
Бороться и искать, найти и перепрятать

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 04.10.2016 (Вт) 15:34

ger_kar писал(а):Если у тебя что то работает не так, значит ты что то не то делаешь.

ну, я и не утверждаю, что всё делаю правильно, иначе меня здесь не было бы, верно? :lol:
я пробовал так:
Код: Выделить всё
Private Sub Text3_Change(Index As Integer)
iNC = Val(Text3(0).Text)
Text4(0).Text = Cur(Text1(0).Text) * Cur(Text2(0).Text) * iNC
iNC = Val(Text3(1).Text)
Text4(1).Text = Cur(Text1(1).Text) * Cur(Text2(1).Text) * iNC
End Sub

получил вот это:
Изображение
объясни, пожалуйста, как сделать правильно по индексу?
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 04.10.2016 (Вт) 16:05

Всё дело в Архитектуре! :)
Вложения
Таблица.rar
Массив элементов управления
(1.71 Кб) Скачиваний: 179
O, sancta simplicitas!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 04.10.2016 (Вт) 16:32

Хорошо, домой приеду — посмотрю. Спасибо.
У каждого своя истина... но каждому - своё зло!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 04.10.2016 (Вт) 18:51

О, pronto, это просто супер!!! Именно о таком варианте я и мечтал ранее: написать прогу с возможностью добавления строк, но код у меня был кривой и громоздкий и Герман его забраковал. Думаю, это то, что мне нужно! Спасибо большое! Буду ваять дальше. :)
У каждого своя истина... но каждому - своё зло!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 04.10.2016 (Вт) 18:53

pronto писал(а):Всё дело в Архитектуре! :)

такая архитектура мне по душе! :D
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 05.10.2016 (Ср) 1:05

Пожалуйста!
Это самый простой вариант. Если таблица будет очень большой, то могут возникнуть неприятные артефакты при перерисовке формы (сворачивание/разворачивание/перемещение). Тогда нужно будет рисовать таблицу вручную, имитируя вид контролов. Контрол для ввода значения оставить один, но при клике на «ячейку» перемещать его на нужную позицию.
O, sancta simplicitas!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: запрет ввода символов в массиве из TextBox

Сообщение ger_kar » 05.10.2016 (Ср) 4:57

Если бы я делал, что то подобное, то я бы использовал для хранения данных отключенный рекордсет ADODB или его легковесный вариант ADOR и грид подключенный к рекордсету для отображения данных. Минимум кода и куча доп возможностей, включая сортировку.
Бороться и искать, найти и перепрятать

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 05.10.2016 (Ср) 8:25

Дело в том, что данная таблица будет использоваться мной на работе для расчёта перерасхода материала при печати и не пойдёт в коммерческое использование, так что для меня важно, чтобы она просто давала верный результат. Кроме всего прочего в неё редко будут вводиться более 10 позиций - как правило 5-7. Поэтому вряд ли здесь пригодятся ADODB с его возможностями.
У каждого своя истина... но каждому - своё зло!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 10.10.2016 (Пн) 23:30

Код я немного подправил в соответствии со своими нуждами:
Код: Выделить всё
Private LastIndex As Long
Private CurrRow As Long

Private Const Columns = 5

Option Explicit

'=====================================================
'добавление строки
'=====================================================
Private Sub lblImgPlus_Click()
Dim i As Long
Dim t As Long

t = txtPrint(LastIndex).Top + 375

For i = LastIndex + 1 To LastIndex + Columns
   Load txtPrint(i)
   txtPrint(i).Top = t
   txtPrint(i).Left = txtPrint(i - Columns).Left
   txtPrint(i).Visible = True
Next i

    lblImgPlus.Top = lblImgPlus.Top + 375
    lblImgMinus.Top = lblImgMinus.Top + 375
    lblImgMinus.Enabled = True
   
    LastIndex = LastIndex + Columns

t = LastIndex \ Columns

Load lblResult(t)
     lblResult(t).Top = txtPrint(LastIndex).Top
     lblResult(t).Visible = True
Load chkInclude(t)
     chkInclude(t).Top = txtPrint(LastIndex).Top
     chkInclude(t).Visible = True
Load lblImg(t)
     lblImg(t).Top = txtPrint(LastIndex).Top + 50
     lblImg(t).Caption = "изображение " & i / 5
     lblImg(t).Visible = True
frmMain.Height = frmMain.Height + 375
frmImage.Height = frmImage.Height + 375
     

End Sub

'=====================================================
'удаление строки
'=====================================================
Private Sub lblImgMinus_Click()
Dim i As Long

For i = LastIndex - 4 To LastIndex
   Unload txtPrint(i)
Next i

Unload lblResult(LastIndex \ Columns)
Unload chkInclude(LastIndex \ Columns)
Unload lblImg(LastIndex \ Columns)

LastIndex = LastIndex - Columns
lblImgPlus.Top = lblImgMinus.Top - 375
lblImgMinus.Top = lblImgMinus.Top - 375

If LastIndex \ Columns = 0 Then
   lblImgMinus.Enabled = False
End If
frmMain.Height = frmMain.Height - 375
frmImage.Height = frmImage.Height - 375

End Sub

Private Sub Form_Load()
LastIndex = 4
End Sub

'=====================================================
'вычисление
'=====================================================

Private Sub txtPrint_Change(Index As Integer)

Dim i As Long
Dim result As Long

For i = CurrRow * Columns To CurrRow * Columns + 4
   result = result + CLng(Val(txtPrint(i).Text))
Next i

lblResult(CurrRow).Caption = LTrim(result)

End Sub


Private Sub txtPrint_GotFocus(Index As Integer)
CurrRow = Index \ Columns

Dim i As Long

lblSign(0).Top = txtPrint(CurrRow * Columns).Top + 50
For i = 1 To 3
   lblSign(i).Top = txtPrint(CurrRow * Columns).Top + 50
Next i

'ManageButtons CurrRow
End Sub

Private Sub txtPrint_KeyPress(Index As Integer, KeyAscii As Integer)
   Select Case KeyAscii
   Case 44 To 47
      KeyAscii = 44
   Case 48 To 57
      Exit Sub
   Case vbKeyBack
      Exit Sub
   Case Else
      KeyAscii = 0
   End Select
End Sub

Private Sub ManageSign(ByVal LI As Long)

Dim i As Long

If LI \ Columns = CurrRow Then
   
   CurrRow = CurrRow - 1
   
   lblSign(0).Top = txtPrint(CurrRow * Columns).Top - 30
   For i = 1 To 3
      lblSign(i).Top = txtPrint(CurrRow * Columns).Top
   Next i
   
End If

End Sub


и теперь моя таблица выглядит так (после 4-х нажатий "изображение +"):

Изображение

но в связи с изменением арифметических действий я теперь не понимаю, как произвести вычисление... мне нужно получить площадь каждого изображения в зависимости от количества, а также площадь его перерасхода. не понимаю, как написать код для расчёта. :roll:
Вложения
CalcOver.rar
(3.18 Кб) Скачиваний: 161
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 11.10.2016 (Вт) 11:08

Строка в вычислениях result = result + CLng(Val(txtPrint(i).Text)) не соответствует действительности. Судя по скрину, должно быть так:
Код: Выделить всё
Dim result as Double
result = result * Val(txtPrint(i).Text)

Колонок для ввода значений сколько? Три? Если да, то в вычислениях нужно изменить верхнюю границу цикла:
Код: Выделить всё
For i = CurrRow * Columns To CurrRow * Columns + 2

Перерасход для каждого изображения как должен вычисляться? Так, между делом. Подобного рода вычислительные таблички очень хорошо реализуются на VBA в Excel...
O, sancta simplicitas!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 11.10.2016 (Вт) 11:59

Изменений в процедуре вычисления будет ещё больше, но пока она должна иметь следующий вид:
Код: Выделить всё
Private Sub txtPrint_Change(Index As Integer)

   Dim i As Long
   Dim result As Double
   
   result = 1
   
   For i = CurrRow * Columns To CurrRow * Columns + 2
      result = result * Val(Replace(txtPrint(i).Text, ",", "."))
   Next i
   
   txtPrint(i).Text = Replace(Str$(Round(result, 3)), ".", ",")

End Sub


Если в процедуре txtPrint_KeyPress изменить строки Case 44 To 47: KeyAscii = 44 на Case 44 To 47: KeyAscii = 46, то в процедуре txtPrint_Change можно удалить функцию Replace
O, sancta simplicitas!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 12:38

pronto писал(а):Строка в вычислениях result = result + CLng(Val(txtPrint(i).Text)) не соответствует действительности.
да, потому что я даже не пытался её переделать, т.к. не понимаю сути :lol:
pronto писал(а):Колонок для ввода значений сколько? Три?
да, три, но должно ещё учитываться значение чекбокса, чтобы потом делить "лишний остаток"
pronto писал(а):Перерасход для каждого изображения как должен вычисляться?
к длине изображения и к его ширине прибавляется значение, указанное в окне "поля припуска", перемножается с целью получения площади с перерасходом, а потом из неё вычитается площадь картинки. это перерасход каждого изображения. а будет ещё общий перерасход для всего печатного блока, который будет вычисляться разницей между суммой всех изображений с припусками и площадью материала.
У каждого своя истина... но каждому - своё зло!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 12:40

pronto писал(а):Подобного рода вычислительные таблички очень хорошо реализуются на VBA в Excel...
дело в том, что Excel'a на компах нет - только OO, а в Google таблицах функционал обрезан... поэтому было принято решение сваять маленькую прогу.
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 11.10.2016 (Вт) 13:11

Поля есть со всех сторон изображения?
O, sancta simplicitas!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 13:27

pronto писал(а):Поля есть со всех сторон изображения?
да, но поскольку они будут равными, то указывается просто дистанция от одного изображения до другого и, соответственно, то значение, которое указано в поле припуска, просто плюсуется к длине и ширине. например, печатаем баннер 2000х4000 мм. по периметру нужны поля 50 мм. в поле припуска ставим 100 мм. итого: площадь материала = (ширина печати (2000) + поля (100)) * (длина печати (4000) + поля (100)) * кол-во (1) = 8,61 м2. из них печать - 8 м2. значит перерасход = 0,61 м2. как-то так.
У каждого своя истина... но каждому - своё зло!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 13:32

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

Изображение

жёлтым показан "лишний" перерасход
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 11.10.2016 (Вт) 14:18

С изображением стало легче, хотя я так это себе и представлял. Теперь точно понятно, что нужно.
1. Вычислить площадь изображения («Ширина печати» х «Длина печати» х «Кол-во копий»). Возможно, «Ширина печати» и «Длина печати» нужно переименовать в «Ширина» и «Длина», ведь речь идёт об изображении?
2. Вычислить площадь изображения с полями и умножить её на количество копий.
3. Из значения пункта 2 вычесть значение пункта 1. Получается перерасход по этому изображению.
4. Вычислить площадь материала («Ширина материала» х «Длина материала»)
5. Пройтись по «включенным» изображениям и суммировать значения из пункта 2
6. Из значения пункта 4 вычесть значение пункта 5.

Вот код, который выполняет действия до 3-го пункта:
Код: Выделить всё
Private Sub txtPrint_Change(Index As Integer)

   Dim i As Long
   Dim ImgSquare As Double
   Dim SheetSquare As Double
   Dim W As Double, H As Double
   Dim SheetQ As Double
     
   i = CurrRow * Columns
   
   For i = i To i + 2
      txtPrint(i).Tag = Replace(txtPrint(i).Text, ",", ".")
   Next i
   
   i = i - 3
   
   W = Val(txtPrint(i).Tag)
   H = Val(txtPrint(i + 1).Tag)
   SheetQ = Val(txtPrint(i + 2).Tag)

   ImgSquare = W * H

   SheetSquare = (W + (Indent * 2)) * (H + (Indent * 2))

   txtPrint(i + 3).Text = Replace(Str$(Round(ImgSquare * SheetQ, 3)), ".", ",")

   txtPrint(i + 4).Text = Replace(Str$(Round((SheetSquare - ImgSquare) * SheetQ, 3)), ".", ",")

End Sub

Да. Пришлось всё изменить. Indent = Val(Replace(txtDist.Text, ",", ".")) присваивается в процедуре txtPrint_GotFocus. Дальше сам?
O, sancta simplicitas!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 14:42

pronto писал(а):Дальше сам?
да, дальше я справлюсь! :lol: у меня затыка именно с вычислением значений в массиве. ОГРОМНОЕ СПАСИБО! очень помог! :)
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 11.10.2016 (Вт) 14:59

Обрати внимание, что у меня Indent умножается на 2. Если приходится оперировать именно полем, то и вводить нужно его значение (50, а не 100, как в примере). Или переименовать «Поля припуска» в «Расстояние между изображениями».
O, sancta simplicitas!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 15:05

pronto писал(а):Или переименовать «Поля припуска» в «Расстояние между изображениями».
так 3 строки получается, потому и пришлось назвать "поля припуска" искал другое описание, чтобы уложить в 2 строки, но ничего в голову не пришло :) но имеется ввиду именно «Расстояние между изображениями». так что умножение на 2 даст неверный результат.
У каждого своя истина... но каждому - своё зло!

Sha.man
Новичок
Новичок
Аватара пользователя
 
Сообщения: 36
Зарегистрирован: 25.01.2014 (Сб) 15:05
Откуда: Краснодар

Re: запрет ввода символов в массиве из TextBox

Сообщение Sha.man » 11.10.2016 (Вт) 15:07

может просто в коде указать, что слово "дистанция в мм" нужно разделить на 2 строки, скажем, "дистан / ция в мм" ?
У каждого своя истина... но каждому - своё зло!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: запрет ввода символов в массиве из TextBox

Сообщение pronto » 11.10.2016 (Вт) 15:18

Оставь «Поля...», умножение на 2, вводить в «Поля...» именно размер поля, а не расстояние и тогда будет соответствие.
Так как Distance = Indent х 2, то
(W + Distance) x (H + Distance) = (W + (Indent x 2)) x (H + (Indent x 2))
O, sancta simplicitas!

След.

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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 25

    TopList