Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А .Net-NumericUpDown на предмет ES_NUMBER полностью лечится? / 4 сообщений из 4, страница 1 из 1
02.12.2014, 07:26
    #38822126
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А .Net-NumericUpDown на предмет ES_NUMBER полностью лечится?
Собственно, ввод "только цифры" реализовано - да, но есть недостатки:
1) позволяет ввести запятую ' , '
2) позволяет вставить текст (не цифры) ctrl+V
3) не выводит системное сообщение "Недопустимый символ" (см. рисунок внизу).

Присобаченный 'edit' (текстбокс) я нашел CType(NumericUpDown1.Controls(1), TextBox)

Код такой (поместил на форму NumericUpDown1 и TextBox1 для сравнения)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Class Form1
  Const ES_NUMBER = &H2000&
  Const GWL_STYLE = (-16)
  Private Declare Unicode Function SetWindowLong Lib "user32" Alias "SetWindowLongW" _
   (ByVal hwnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
  Private Declare Unicode Function GetWindowLong Lib "user32" Alias _
   "GetWindowLongW" (ByVal hwnd As IntPtr, ByVal nIndex As Integer) As Integer

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    SetWindowLong(TextBox1.Handle, GWL_STYLE, GetWindowLong(TextBox1.Handle, GWL_STYLE) Or ES_NUMBER)

    Dim hwndTB As IntPtr = CType(NumericUpDown1.Controls(1), TextBox).Handle
    SetWindowLong(hwndTB, GWL_STYLE, GetWindowLong(hwndTB, GWL_STYLE) Or ES_NUMBER)
  End Sub
End Class



(1) и (2) как положено лечится.
Но (3) выводится только при проверке (1) и (2) -т.е. запятая либо Ctrl+V (текст).
А при вводе "не цифр" с клавиатуры (3) не срабатывает.
И понятно почему - из за дебильной внутренней реализации "Numeric" -этот детсад суко "отлавливает" не цифры еще до срабатывания стиля. Как полечить чтоб "Недопустимый символ" всегда выводилось?
Иными словами, можно ли убрать внутреннюю реализацию "Numeric"?
...
Рейтинг: 0 / 0
02.12.2014, 08:18
    #38822143
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А .Net-NumericUpDown на предмет ES_NUMBER полностью лечится?
Дурдом похоже только дурдомом и лечится. Если они запятую по дури пропускают, значит ее и надо скармливать для эмуляции корректного поведения.
Хотя не уверен что что-то не упустил.
Код: vbnet
1.
2.
3.
4.
5.
  Private Sub NumericUpDown1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles NumericUpDown1.KeyPress
    'допустимы цифры либо возврат каретки
    Dim reg As Regex = New Regex("[0-9]")
    If (reg.IsMatch(e.KeyChar) = False) And (Asc(e.KeyChar) <> 8) Then e.KeyChar = ","
  End Sub


P.S. не знаю как "возврат каретки" в Regex добавить.
...
Рейтинг: 0 / 0
02.12.2014, 15:23
    #38822686
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А .Net-NumericUpDown на предмет ES_NUMBER полностью лечится?
Иными словами, можно ли убрать внутреннюю реализацию "Numeric"?

ну так может свою реализацию сделать, которая не так сложна?
или маскед текстбокс заюзить?
...
Рейтинг: 0 / 0
02.12.2014, 17:23
    #38822846
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А .Net-NumericUpDown на предмет ES_NUMBER полностью лечится?
Winnipuhну так может свою реализацию сделать, которая не так сложна?
Да есть у меня эта своя реализация в двух вариантах (с TextBox-контрол и с Edit-API) -через API
CreateUpDownControl Lib "comctl32.dll" и т.п. (то что делал в VB6)
Только уж если .Net дает мне готовый контрол, чего им не воспользоваться -кода по-любому сильно меньше..
Код что я привел выше вроде не напряжный и почти "лечит".
Рамочка у TextBox прада не совсем правильная в плане цвета, и кнопочки UpDown не нажимаются при "стрелка вверх-вниз".
Могли б конечно и поприличней сделать.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А .Net-NumericUpDown на предмет ES_NUMBER полностью лечится? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]