Что нового

[Элементы GUI] Как проверить, что в элемент GUI введено числовое значение?

Крепыш

Новичок
Сообщения
105
Репутация
2
Код:
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
Opt('MustDeclareVars', 1)
Opt('GUICoordMode', 1)

GUICreate("Title", 140, 100, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MINIMIZEBOX), $WS_EX_TOPMOST)
GUICtrlCreateLabel('К:', 8, 10)
Global $hSK = GUICtrlCreateInput('', 30, 7, 40)
Global $hCalc = GUICtrlCreateButton('Рассчитать', 34, 68, 74, 24)
GUICtrlSetOnEvent($hCalc, '_Calc')
Global $hI = GUICtrlCreateLabel('', 95, 20, 40, 40)
GUICtrlSetFont($hI, 20, 800)
GUISetState(@SW_SHOW)

While True
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $hCalc
      _Calc()
  EndSwitch
WEnd

Func _Calc()
  Local $sSK = GUICtrlRead($hSK)
  Local $iSK = Number($sSK)
  GUICtrlSetData($hI, $iSK * 2)
EndFunc

Как проверить, что в элемент GUI введено числовое значение?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
If IsNumber(GUICtrlRead($hSK)) Then ...
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Или так:
Код:
If StringIsDigit(GUICtrlRead($hSK)) Then
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Крепыш
Код:
If StringRegExp( GUICtrlRead($hSK), "^[\d\.\,]+$" ) Then
 
Автор
К

Крепыш

Новичок
Сообщения
105
Репутация
2
Код:
Local $sSK = GUICtrlRead($hSK)
  If StringRegExp($sSK, "^\d+[\.,]?\d*$") Then 
    Local $iSK = Number(StringRegExpReplace($sSK, ",", "."))
    GUICtrlSetData($hI, $iSK)
  Else
    GUICtrlSetData($hI, "Er")
  EndIf
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Крепыш [?]
Как проверить, что в элемент GUI введено числовое значение?
Код:
Func _Calc()
   
   Switch VarGetType(Execute(GUICtrlRead($hSK)))
	  Case 'Double'
		 MsgBox(262208, '', 'Дробное число!')
	  Case 'Int32'
		 MsgBox(262208, '', 'Целое число!')
	  Case 'String'
		 MsgBox(262208, '', 'Строка!')
   EndSwitch

   Local $sSK = GUICtrlRead($hSK)
   Local $iSK = Number($sSK)
   GUICtrlSetData($hI, $iSK * 2)
EndFunc



Добавлено:
Сообщение автоматически объединено:

Крепыш [?]
Так ведь не работает же.
Да. Извиняюсь, GUICtrlRead возвращает только строковые значения. Но, если вы планируете использовать только целочисленные значения, то можно использовать стиль $ES_NUMBER
Код:
Global $hSK = GUICtrlCreateInput('', 30, 7, 40, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))



Добавлено:
Сообщение автоматически объединено:

Крепыш
IMHO: StringRegExp слишком жирно для такой задачи. :smile:
 
Автор
К

Крепыш

Новичок
Сообщения
105
Репутация
2
Garrett сказал(а):
Но, если вы планируете использовать только целочисленные значения, то можно использовать стиль $ES_NUMBER
Крепыш сказал(а):
Число может быть дробным.


alex33 сказал(а):
А если так?
Код:
If StringIsDigit(GUICtrlRead($hSK)) Or StringIsFloat(GUICtrlRead($hSK)) Then
Тоже вариант. Но я решил дать возможность вводить дробные числа с разделителем как точкой так и запятой. Поэтому остановился на этом варианте
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Крепыш [?]
Но я решил дать возможность вводить дробные числа с разделителем как точкой так и запятой.
Код:
If StringIsDigit(GUICtrlRead($hSK)) Or StringIsFloat(StringReplace(GUICtrlRead($hSK), ",", ".")) Then
 
Верх