Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > numericUpDown


Автор: DarkFalcon 8.9.2007, 08:57
Можно ли как нибудь, сделать проверку в numericUpDown, жмешь ты вверх или вниз? smile Как это проверить?  smile 

Автор: marcusmae 8.9.2007, 19:12
DarkFalcon, события такого нет. Есть событие ValueChanged, загорающееся при изменении значения в NumericUpDown. Внутри обработчика можно было бы сравнить новое значение с тем, что было ранее (куда-нибудь его записав), и на основании того, увеличилось ли оно или уменьшилось, принять решение. Как-нибудь так :

Код

Decimal oldValue = numericUpDown.Value;
...
private void NumericUpDown_ValueChanged(Object sender, EventArgs e) {

   if (this.oldValue > numericUpDown.Value)
   {
      // нажата стрелка вниз
   }
   else
   {
      // нажата стрелка вверх
   }

   // сохранить новое значение для следующей проверки
   this.oldValue = numericUpDown.Value;

}


Подойдёт?
Отследить вариант непосредственной установки значения (без использования стрелок) можно, зарегистрировавшись дополнительно на получение событий, связанных с редактированием текстового поля...
Интересно, а зачем это?  smile 

Автор: Dark_Falcon 8.9.2007, 22:26
Ну собственно я так и сделал...  smile  Просто я думал, что может есть какая-то встроенная хрень.  smile Ну да это не важно. Просто интересно было. Спасибо.  smile 

Автор: contramundum 27.5.2008, 10:40
Как сделать красиво так, чтоб много одинаковых контролов "NumericUpDown" при увеличении значения после 9-ти скидывались в 0 и начинали сначала, ну а при уменьшении после 0 показывали 9?
выхожу из положения пока только очень громоздко и некрасиво так:
Код

If NumericUpDown1.Value > 9 Then NumericUpDown1.Value = 0
If NumericUpDown1.Value < 0 Then NumericUpDown1.Value = 9
' и так для каждого, а их много


думал что-то вроде этого, но не работает:
Код

If (NumericUpDown1.Value Or NumericUpDown2.Value Or NumericUpDown3.Value Or NumericUpDown4.Value) > 9 Then NumericUpDown1.Value = 0 OrNumericUpDown2.Value = 0 Or NumericUpDown3.Value = 0 Or NumericUpDown4.Value = 0

 smile 

Автор: QryStaL 27.5.2008, 11:28
Подпиши на них всех 1 обработчик и в нем проверяй значение того NumericUpDown, который сгенерировал событие.

Автор: contramundum 27.5.2008, 14:50
А как это сделать?! smile 

Автор: QryStaL 27.5.2008, 15:02
Код

Public Class Form1
    Private Sub InitializeComponent()
        ' ...
        AddHandler Me.numericUpDown1.ValueChanged, New EventHandler(AddressOf Me.numericUpDown_ValueChanged)
        AddHandler Me.numericUpDown2.ValueChanged, New EventHandler(AddressOf Me.numericUpDown_ValueChanged)
        AddHandler Me.numericUpDown3.ValueChanged, New EventHandler(AddressOf Me.numericUpDown_ValueChanged)
        ' ...
    End Sub

    Private Sub numericUpDown_ValueChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim nud As NumericUpDown = DirectCast(sender, NumericUpDown)
        If (Not nud Is Nothing) Then
            If (nud.Value > 9) Then
                nud.Value = 0
            ElseIf (nud.Value < 0) Then
                nud.Value = 9
            End If
        End If
    End Sub
End Class


P.S. Писал на C#, VB код посмотрел в рефлекторе. =)

Автор: contramundum 28.5.2008, 13:10
ДА!! Огромное Спасибо! Все работает! ваще круто! smile 


 smile 
 smile 

Автор: jonie 28.5.2008, 23:08
лучше имхо унаследоваться от контрола и сделать все в нем. это улучшит читабельность кода.
конечно, если такая логика работы является стандартной в контексте приложения\или окна...

Автор: contramundum 29.5.2008, 08:04
jonie, а как это сделать? smile 

Автор: jonie 29.5.2008, 09:50
эээ.... также как и собственный контрол. почитай лучше книжку, там это описано довольно подробно...
просто тут писать много. да и вообще есть гугл еще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)