C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ある数値を超えるとNumericUpDownが一瞬だけ点滅す

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■89908 / inTopicNo.1)  ある数値を超えるとNumericUpDownが一瞬だけ点滅す
  
□投稿者/ たんこぶ (1回)-(2019/01/16(Wed) 10:17:34)

分類:[.NET 全般] 

NumericUpDownの数値を変化させた時
ある設定してある数値を超えると一瞬だけコントロールが点滅するような仕組みを作りたいのですが
うまくいきません。

Private Sub NumericUpDown7_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown7.ValueChanged

If NumericUpDown7.Value > 500 Then

NumericUpDown7.ForeColor = Color.White
NumericUpDown7.BackColor = Color.Red
Thread.Sleep(50)
NumericUpDown7.ForeColor = Color.Black
NumericUpDown7.BackColor = Color.White

End If

End Sub


とやってもうまくいきませんでした。

一体どのようにすれば良いですか?


引用返信 編集キー/
■89911 / inTopicNo.2)  Re[1]: ある数値を超えるとNumericUpDownが一瞬だけ点滅す
□投稿者/ 774RR (659回)-(2019/01/16(Wed) 11:07:58)
VB 知らんけど

イベントハンドラ (この例では ValueChanged) を終了させないと画面更新されないというのが仕様。
なので
> NumericUpDown7.ForeColor = Color.White
などなどの画面更新がなされるのは ValueChanged を脱出した後。
> Thread.Sleep(50)
もイベントハンドラの中でやっちゃうと画面更新されなくて当然。

> NumericUpDown7.ForeColor = Color.White
> NumericUpDown7.BackColor = Color.Red
は、現在のとおり ValueChanged の中においておき

タイマーを1つ置いて 50msec でキックし

タイマハンドラの中で
> NumericUpDown7.ForeColor = Color.Black
> NumericUpDown7.BackColor = Color.White

とか?(未テスト)

色固定にするとハイコントラスト環境とかで違和感バリバリかもしんない。
引用返信 編集キー/
■89916 / inTopicNo.3)  Re[1]: ある数値を超えるとNumericUpDownが一瞬だけ点滅す
□投稿者/ 魔界の仮面弁士 (2014回)-(2019/01/16(Wed) 18:38:35)
No89908 (たんこぶ さん) に返信
> NumericUpDownの数値を変化させた時
> ある設定してある数値を超えると一瞬だけコントロールが点滅するような仕組みを作りたいのですが
> うまくいきません。

これでどうでしょう。


Private Sub NumericUpDown1_ValueChanged(sender As System.Object, e As System.EventArgs) Handles NumericUpDown1.ValueChanged
 With DirectCast(sender, NumericUpDown)
  If .Value > 500 Then
   .ForeColor = Color.White
   .BackColor = Color.Red
   .Update()
   BeginInvoke(New MethodInvoker(AddressOf .ResetForeColor))
   BeginInvoke(New MethodInvoker(AddressOf .ResetBackColor))
  End If
 End With
End Sub
引用返信 編集キー/
■89917 / inTopicNo.4)  Re[2]: ある数値を超えるとNumericUpDownが一瞬だけ点滅す
□投稿者/ 魔界の仮面弁士 (2015回)-(2019/01/16(Wed) 18:49:58)
No89916 (魔界の仮面弁士) に追記
> これでどうでしょう。

追加で。



'別案1
Private Sub NumericUpDown2_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown2.ValueChanged
 With DirectCast(sender, NumericUpDown)
  If .Value > 500 Then
   .ForeColor = Color.White
   .BackColor = Color.Red
   .Update()
   .ResetForeColor()
   .ResetBackColor()
  End If
 End With
End Sub


'別案2
Private Sub NumericUpDown3_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown3.ValueChanged
 With DirectCast(sender, NumericUpDown)
  If .Value > 500 Then
   .ForeColor = Color.White
   .BackColor = Color.Red
   .Update()
   .ResetForeColor()
   .ResetBackColor()
   .Update()
  End If
 End With
End Sub



マウスホイールを、長く素早く回転させ続けた場合、
色が戻るタイミングが3パターンそれぞれで異なってきます。
引用返信 編集キー/
■89923 / inTopicNo.5)  Re[3]: ある数値を超えるとNumericUpDownが一瞬だけ点滅す
□投稿者/ ぴち (4回)-(2019/01/17(Thu) 13:06:16)
>ある設定してある数値を超えると一瞬だけ

実現したいのは500を超えた瞬間に1回だけ点滅?
それは500未満の値から500になった時だけ?
数値を変化させた時とはキーボードからの直接入力も含む?

もうちょっと仕様を詳しくお願い。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ