2013-02-03 5 views
0

Я подклассы текстовое поле в соответствии с моими потребностями, по примеру из hereПодкласс контроль NumericUpDown

На этом пути я пытаюсь подкласс управления NumericUpDown, чтобы получить функциональность SelectAll на них и заменить, если точка («») полукокс нажата на запятую (",") char, чтобы подобрать элемент управления NumericUpDown, более подходящий для моей локали.

Но я не могу этого сделать, потому что NumericUpDown не обладает такими же свойствами, как текстовое поле, и мне бы хотелось, чтобы оба этих элемента управления ведут себя одинаково.

В моем коде две проблемы остается, SelectAll и SelectionLength:

Option Explicit On 
Option Strict On 

Public Class xNumericUpDown 
Inherits NumericUpDown 

Private alreadyFocused As Boolean 

Protected Overrides Sub OnLeave(ByVal e As EventArgs) 
    MyBase.OnLeave(e) 

    Me.alreadyFocused = False 

End Sub 

Protected Overrides Sub OnGotFocus(ByVal e As EventArgs) 
    MyBase.OnGotFocus(e) 

    If MouseButtons = MouseButtons.None Then 

     Me.SelectAll() ' HOW TO MAKE SELECTALL SUB FOR NUMERICUPDOWN? 
     Me.alreadyFocused = True 

    End If 
End Sub 

Protected Overrides Sub OnMouseUp(ByVal mevent As MouseEventArgs) 
    MyBase.OnMouseUp(mevent) 

    If Not Me.alreadyFocused AndAlso Me.SelectionLength = 0 Then ' HOW TO CHECK SELECTIONLENGTH FOR NUMERICUPDOWN? 

     Me.alreadyFocused = True 
     Me.SelectAll() ' HOW TO MAKE SELECTALL SUB FOR NUMERICUPDOWN? 

    End If 
End Sub 

Protected Overrides Sub OnKeyPress(ByVal keyevent As KeyPressEventArgs) 
    MyBase.OnKeyPress(keyevent) 

    If keyevent.KeyChar = "." Then 
     keyevent.KeyChar = CChar(",") 
    End If 
End Sub 

End Class 

Пожалуйста, помогите, чтобы получить эту работу.

ответ

1

для проверки длины и выбора всего текста попробовать это:

If Not Me.alreadyFocused AndAlso Me.Text.Length = 0 Then 'Though I suspect it should be <> 0 

    Me.alreadyFocused = True 
    Me.Select(0, Me.Text.Length) 

End If 

и для замены полукокса, попробуйте это (непроверенные):

If keyevent.KeyChar = "."c Then 
     keyevent.Handled = True 
     SendKeys.Send(",") 
End If 
+0

Заменить символ хорошо работает, выбирая с клавиатуры OK но выбор с помощью мыши не работает. –

+0

Заменив Me.Text.Length = 0 на Me.Text.Length <> 0, как вы сказали, выбор с помощью мыши (вверх) также работает так, как ожидалось. Большое спасибо! –

+0

@ user973238 Я рад, что это сработало. Спасибо, что приняли :-) – AbZy

Смежные вопросы