Форматирование значений в элементах диалога

Автор andreya81, 27 сентября 2013, 12:59

0 Пользователи и 1 гость просматривают эту тему.

andreya81

Есть такой диалог для ввода данных о расходе материала. В нем присутствует такие элементы: ListBox1 в котором выбирается единица измерения материала (кг., м.п., шт и т.д); Numeric1 в который вносится количество деталей сделанных из этого материала в форме целого числа (например 100); Numeric2 в котором указывается коэффициент расхода материала на одну деталь в формате дробного или целого числа (например 0.981 или 98 (для шт.)); Numeric3 в котором автоматически устанавливается результат вычисления произведения 100*0.981. Так вот задача состоит в том, чтобы в Numeric3 результат вычисления отображался с разрядностью согласно выбранного в ListBox1 значения т.е если "кг." или "гр." то результат 98,100, если "шт." то 98 если "м.п" 98,10.

JohnSUN

У полей NumericField есть специальное свойство DecimalDigits. Читается с помощью .getDecimalDigits(), устанавливается с помощью .setDecimalDigits(число)

[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

andreya81


andreya81

#3
У меня вот эта срока кода Select Case ctrlUnits.getSelectedItemPos()
Вызывает вот эту ошибку:
Ошибка времени выполнения BASIC.
Свойство или метод не найдены: getSelectedItemPos.

Где я мог накосячить  :-\

Sub onChangeUnits(oEvent)
Dim ctrlUnits As Variant
Dim DecimalDigits As Integer
   ctrlUnits = Dlg3.getControl("EzBox")
   ctrlOut = Dlg3.getControl("RashodNormal")
   ctrlOut1 = Dlg3.getControl("FactRashod")
REM Можно, конечно, написать пачку конструкций If вида
REM If ctrlUnits.getSelectedItem()="кг." Then...EndIf
REM If ctrlUnits.getSelectedItem()="м.п." Then...EndIf
REM Но проще работать с индексом выбранной строки
   Select Case ctrlUnits.getSelectedItemPos()
      Case 0, 2   ' Килограммы и квадратные метры - три знака после запятой
            DecimalDigits = 3
        Case 1   ' Погоные метры - два знака
            DecimalDigits = 2
        Case 3   ' Штуки - без дробной части
            DecimalDigits = 0
        Case Else   ' Во всех остальных случаях - 1 знак после запятой
            DecimalDigits = 1
   End Select
   Dlg3.getControl("NormaRS").setDecimalDigits(DecimalDigits)
   Dlg3.getControl("RashodNorma").setDecimalDigits(DecimalDigits)
   Dlg3.getControl("FactRashod").setDecimalDigits(DecimalDigits)
End Sub

JohnSUN

Цитата: andreya81 от 30 сентября 2013, 08:09
У меня вот эта срока кода Select Case ctrlUnits.getSelectedItemPos()
Вызывает вот эту ошибку:
Ошибка времени выполнения BASIC.
Свойство или метод не найдены: getSelectedItemPos.

Где я мог накосячить  :-\
Первое, что приходит на ум - вместо ListBox'а упорно пытаешься использовать ComboBox? А у него нет метода с именем getSelectedItemPos
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

andreya81


andreya81

А мне вторую чайку добавили! Уряяяяяяяяяяяяяяя!

andreya81

Рано обрадовался млин. Он мне теперь не хочет переносить из диалога наименование единицы измерения пишет, что
Ошибка времени выполнения BASIC.
Свойство или метод не найдены: getText.

торчок получается здесь
control = Dlg3.GetControl("EzBox")
   cell = oSheet.getCellByPosition(5, n)
   cell.setString(control.getText())

Меняю на
cell.setString(control.getSelectedItemPos())
он мне вместо текста цифры ставит млин

если я правильно понимаю собака зарыта где-то между ListBox и getTeхt
Подскажите пожалуйста неучу :-\, что мне сюда запихнуть
cell.setString(control.????())

JohnSUN

А глянь-ка закомментированные строки в нашем макросе... Ну, там где речь идёт о "Можно, конечно, написать пачку конструкций If вида"... Каким методом из контрола там выделенный текст выдергивается?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

andreya81