Перейти к публикации

Создание формы в SW на VB


Genya_ms

Рекомендованные сообщения

Доброго времени суток!

Проблема в следующем: Пишется макрос, например для построения вала, размеры задаются через форму. при создании на поле формы объекта TextBox1 - в него вводится диаметр вала в TextBox2 - длина вала. В переменные программы считываются данные из полей формы их свойства Text.

Например: Diam = TextBox1.Text

Hight = TextBox2.Text

при вводе целочисленных значений в поля формы программа нормально их воспринимает, а вот при вводе значений через запятую 1.34 и 4.56 - ругается принимает их за текстовые данные. Переменные описанны как Single.

Что можно сделать чтобы вводить через текстовое поле формы не только целочисленные значения?

Ссылка на сообщение
Поделиться на других сайтах


Что можно сделать чтобы вводить через текстовое поле формы не только целочисленные значения?

можно считывать строчку и анализировать ее перед использованием в программе.

Запятые можно менять на точки и наоборот, например, так

Public Function pt2comm(s As String) As String

Dim n As Integer

n = InStr(s, ".")

If n > 0 Then Mid(s, n, 1) = ","

pt2comm = s

End Function

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

Dim s As String

Dim boo As Boolean

s = pt2comm(tbxDeltaS.Value)

boo = IsNumeric(s)

DeltaS = s 'записываем в переменную

Далее проверяем boo и если оно= true закрываем окно с успехом, в противном материм юзера

Ссылка на сообщение
Поделиться на других сайтах

А если ввести через точку ?

sokol7 правильно мыслит.

Поменяйте разделитель десятичных дробей по умолчанию в настройках системы, чтобы точка вводилась и на русском и на английском языках.

Ссылка на сообщение
Поделиться на других сайтах

Запятая, точка - аналогично...

Vadim_ryb_ спасибо, я делал аналогично. Анализировал введенные данные как текст, затем разбивал его на 2-ва значения до запятой и после. И потом из них составлял общую переменную.

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

Ссылка на сообщение
Поделиться на других сайтах

Народ спасибо за помощь. Данная вещь не работала в макросах SW_2007 в SW_2009 все пошло...

Ну что-то где-то не совсем понятно :blink:

Ссылка на сообщение
Поделиться на других сайтах

Эта проблема стара как мир!

Тут надо использовать или конструкцмю типа :

boo = IsNumeric(s)

Поле формы является текстовым и все что туда ввдодится, воспринимается как текст.

В свое время намучался, пока не написал свою фунцию обработки введенных данных.

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

Надо, видимо, сделать (написать) свою фунцию обработки введенных данных, в которой предусмотреть все возможные варианты.

PS. кстати, насколько я помню, эта же проблема присутствует и в Excel`e...

Народ спасибо за помощь. Данная вещь не работала в макросах SW_2007 в SW_2009 все пошло...

Ну что-то где-то не совсем понятно :blink:

Макросы SW тут совершенно ни причем! Тут "работает" чистый "Бэйсик"
Ссылка на сообщение
Поделиться на других сайтах

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

Макросы SW тут совершенно ни причем! Тут "работает" чистый "Бэйсик"

если юзер введет точку/запятую - в любом случае все будет работать корректно, а вот если вместо

"2,02"

из озорства или по ошибке будет введено нечто типа

"2целыххренсотых"

система обязана не только просто "обматерить"(цензурно, конечно, без сквернословия), но и "ткнуть носом" юзера в нужное поле ввода. Иначе эти "хренсотых" уйдут в расчет и тогда точно никто доброго слова не скажет, ибо программа или "вылетит" либо такое насчтает, что :bash: .

Ссылка на сообщение
Поделиться на других сайтах

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

Теперь вопрос: Можно ли не посредством тестового поля числа с запятой в VB пользователю вводить?

Может быть еще способ есть, а я его не знаю...

Ссылка на сообщение
Поделиться на других сайтах

Теперь вопрос: Можно ли не посредством тестового поля числа с запятой в VB пользователю вводить?

Может быть еще способ есть, а я его не знаю...

Сделать форму в виде калькулятора. :-)

И чем вам текстовое поле не угодило?

Ссылка на сообщение
Поделиться на других сайтах

Исследование сируктуры софта компа показали:

Нужно заменить "." на тот разделитель целой и дробной части, который используется в системе.

в системе он записанн по адрессу:

В реестре. HKEY_CURRENT_USER\Control Panel\International ключ sDecimal.

сейчас у меня стоит ","

А по поводу ввода данных не через тестовое поле - пока ничего заменяющего не найденно!

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...