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

Создание формы в 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 пользователей

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




  • Сообщения

    • arsenev
      Первый свободный номер инструмента   int list $toolnumblist = extract(folder('TOOL'), 'Tool.Number.Value') int $newToolNumb = 1 while member( $toolnumblist, $newToolNumb) {     $newToolNumb = $newToolNumb + 1 } Message Info 'Первый свободный номер инструмента - ' + $newToolNumb     Инструменты с повторяющимися номерами   int list $toolnumbers = extract(folder('tool'),'Number.Value') int $i = remove_duplicates($toolnumbers) string $op = '' foreach $n in $toolnumbers {     string list $names = extract(filter(folder('tool'),'this.Number.Value == "' + $n + '"'),'Name')     if size($names) > 1 {         $op = $op + 'Инструменты с повторяющимся номером T ' + $n + CRLF         foreach $name in $names {             $op = $op + $name + CRLF         }         $op = $op + CRLF     } } message info $op
    • PETR_1
      Можно переназначить правую и центральную (колесо) кнопки с помощью бесплатной программы X-Mouse Button Control (есть портабельная версия). Это переназначение будет работать только для компаса.
    • Kelny
      Может изменяемый вами размер импортирован из модели?  Обычно переносилось удержанием левой кнопки мыши, а если сделать двойной клик, то нужно потом выбрать новый объект уже без удержания кнопок мыши.
    • Kelny
      Отключить галочки режима большой сборки. Инструменты-Параметры...-Настройки пользователя-Сборки
    • brigval
      Если не прописали, значит считается, что производственный процесс их изготовления гарантирует качество, достаточное для присвоения литеры. Можно и так посмотреть.   Между прочим, пред вынесением Решения о присвоении литеры проходит "испытания" весь комплект  КД. Разрешат вам не предъявлять часть КД на проверку? Спросите у НК.   И все-таки, если есть Решение о присвоении литеры, надо прочитать, что там сказано. Как сформулировано. Возможно, это снимет все вопросы.
    • cepr
      Есть в Компасе возможность построения зубчатого колеса с углом профиля не 20гр., а 25гр?
    • shishov32
      В ТУ не прописали про испытания КМЧ и упаковки, отсюда все пошло. 
    • clavr
      подскажите: как в солиде 2024 в чертеже перепривязать точку размера к другому элементу? раньше достаточно было выделить размер, точку привязке и удерживая ПКМ перенести к другому элементу. теперь это не работает   По справке сделать не получается( просто быстрые привязке не подсвечиваются https://help.solidworks.com/2024/russian/SolidWorks/sldworks/c_moving_dimension_leadersOH.htm  
    • BSV1
      КМЧ бывают разные. Если КМЧ состоит из одних стандартных болтов, например, то может испытания и не требуются. Если же КМЧ состоит из изделий собственной разработки, то почему их не надо испытывать? Что касается упаковки, то есть ГОСты на тару. Например: 80071.pdf ГОСТ Р 53775-2010 Упаковка. Испытание на штабелирование при статической нагрузке ГОСТ 18211-2018. Упаковка транспортная. Метод испытания на сжатие  gost-9142-2014.pdf  Есть еще испытания изделий в упаковке, которые подразумевают, в том числе, и испытание самой упаковки. Проверяться изделия в упаковке могут на транспортную тряску, удары, падения, климат. При этом упаковка должна обеспечить сохранность изделия. Есть еще вопросы консервации. Как же без испытаний?   Странный у вас нормоконтролер.    
    • brigval
      Ответом на ваш вопрос будет противоречит. А вообще, надо читать Решение о присвоении литеры. Интересно, что там указано?   Интересный вопрос. Если есть указания испытывать экпл. документацию в форме книг, то надо испытывать Я, правда, с этим не сталкивался.
×
×
  • Создать...