Числа...Числа..

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Числа...Числа..

Сообщение Dex » 21.09.2004 (Вт) 15:06

У меня возникло две проблемки:
1.Как запретить писать в TextBox (при работе программы) все символы
кроме чисел :?:
2.Как сделать чтоб когда в TextBox заносилось например число
1,1284629084682 это число округлялось до десятых, ну тоесть чтоб
после запятой был один знак :?:
Заранее :P ГРОМАДНЕЩЕЕ :P спасибо 8)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.09.2004 (Вт) 15:13

Контрол такой есть - MaskEdit. Вот в нем это все и делается. Ну а если не хочешь его - тогда лови у своего текста событие Change() и проверяй пользовательский ввод. Ну и Validate() для верности тоже не помешает.

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сообщение -=TsA=- » 21.09.2004 (Вт) 15:16

Для запрета используй
KeyPress() TextBox'a
где отсеиваеш ненужные клавиши

Округление
Private Sub TextBox_LostFocus()
TextBox.Value=ROUND(TextBox.Value, ЧислоЗнаковПослеЗапятой)
End Sub :idea:

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 21.09.2004 (Вт) 16:04

1.
Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim s As String
s = "qwertyuiop"
If InStr(1, s, Chr(KeyAscii)) > 0 Then KeyAscii = 0
End Sub

'qwertyuiop...' и т.д. - какие символы игнорировать

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 21.09.2004 (Вт) 17:48

Шурик писал(а):'qwertyuiop...' и т.д. - какие символы игнорировать

Если ввести все символы от А до Я, от а до я, от A до Z, от a до z, все знаки препинания и символы "Alt+???", то строка получится порядка 220±5 символов.
По-моему лучше проверять входят ли введенные символы в диапазон разрешимых, а не игнорируемых
Например так:
Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
    Case Asc("0") To Asc("9"), Asc(",")
    Case Else: KeyAscii = 0
End Select
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.09.2004 (Вт) 19:32

Очень в тему ссылка:
http://thedailywtf.com/archive/2004/09/20/1889.aspx
:-D
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.09.2004 (Вт) 19:38

Какое удовольствие я получил :)
alibek, тоже обязательно зайди :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.09.2004 (Вт) 19:51

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

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 21.09.2004 (Вт) 19:59

:D :D :D
Не нраится Select Case, можно и через IF:
Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
    If Not (KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Or KeyAscii = Asc(","))  Then KeyAscii = 0
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 21.09.2004 (Вт) 20:26

Спасибо всем за помощь в моём первом вопросе но всё что вы
написали я знал но раз нет другогог способа значит буду делать так.
И всё таки спасибо. :D

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.09.2004 (Вт) 20:35

Ну почему же :)

Мы когда поприкалываемся, у нас настроение повышается :)

Код: Выделить всё
Option Explicit

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const ES_NUMBER As Long = &H2000&
Private Const GWL_STYLE As Long = -16

Private Sub Form_Load()
  Text1.Text = vbNullString
  SetWindowLong Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 21.09.2004 (Вт) 20:36

на 2-й вопрос:
Код: Выделить всё
Private Sub Text1_LostFocus()
    Text1.Text = Format$(Text1.Text, "#.#")
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 21.09.2004 (Вт) 21:09

Хм... Ещё один вариант по 2-му вопросу:
a-Число
b-Оно округлённое
n-до какого знака после запятой
Код: Выделить всё
b=(int((10^n)*a))/(10^n)
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 21.09.2004 (Вт) 21:10

По-поводу ссылки. Это чего за изврат?
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 22.09.2004 (Ср) 7:24

Для запрета используй
KeyPress() TextBox'a
где отсеиваеш ненужные клавиши


А ведь можно еще и из буфера обмена скопировать в TextBox...

Округление
Private Sub TextBox_LostFocus()


Вообще-то LostFocus использовать в данном случае неверно. Контрол может не терять фокус (например, при нажатии на Enter при наличии Default-ной кнопки OK).
Для проверки введенного (ну и форматирования после ввода) лучше пользовать событие Validate контрола. Ну а при нажатии на ту-же OK делать ValidateControls...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 22.09.2004 (Ср) 7:31

Еще один вариант ответа на первый вопрос:
Код: Выделить всё
Private Sub Text1_KeyPress(KeyAscii As Integer)
    If  (isnumeric(chr(KeyAscii)) or KeyAscii = Asc(",")) =false   Then KeyAscii = 0
End Sub
الفيجوال بيسك الرابح


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

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

Сейчас этот форум просматривают: Google-бот и гости: 0

    TopList