追記
簡単じゃないのはこっち
追記ここまで
WindowsFormアプリのNumericUpDownコントロール
水色の丸のところがそれ
便利だからこんなふうにたくさん使っていたのに
WPFにはない!
ので
WPFでNumericUpDownみたいなの
StackPanelの中にTextBoxとScrollBarを入れて作っている
ScrollBarのValueを基準にすると都合がいい、最小値や最大値、変更値も決められる
ScrollBarは上ボタンを押すとValueが下がって見た目と逆になるので180度回転させている
これだけでok
といっても僕が思いついたんじゃなくて
Where is the WPF Numeric UpDown control? - Stack Overflow
https://stackoverflow.com/questions/841293/where-is-the-wpf-numeric-updown-control
ここに載っていたのをそのまま
あとは少し手間を掛けて
- TextBoxフォーカス時にテキスト全選択する
- 数値の変更はTextBoxやScrollBarの上でマウスホイールでもできるようにする
- 数値以外は入らないようにする
TextBoxフォーカス時にテキスト全選択するにはGotFocusイベント時に
SelectAllメソッドを実行すればいいけど
クリックで選択したときにも全選択したい場合はこれだとできなくて
[WPF] TEXTBOX でフォーカス時にマウスクリックでもテキストを全選択する v2 | rksoftwareこちらで紹介されていた方法で
https://rksoftware.wordpress.com/2016/09/06/001-48/
[WPF] TextBox でフォーカス時にマウスクリックでもテキストを全選択する | rksoftware
https://rksoftware.wordpress.com/2016/06/17/001-38/
こう
InvokeAsyncとかTask.Delayとか初めて使った、全然理解できていない
マウスホイールでScrollBarの数値変更
ScrollBarのMouseWheelイベント時にイベントのパラメーター?のeのDeltaの値を見てValueに足したり引いたりするだけ
次はTextBoxの上でマウスホイールを動かした時
同じようにMouseWheelイベント時にScrollBarのValueを変更すればいいんだけど
どうやってそのScrollBarを取得すればいいのかなあってとこ
TextBox textBox = (TextBox)sender;
Binding binding = BindingOperations.GetBinding(textBox, TextBox.TextProperty);
こうしてBindingOperationsのGetBindingでTextBoxのBindingを取得して
そのElementNameからScrollBarの名前までは取得できたんだけどそこからわかんなくて
C#のWPFで名前からコントロールを取得する - Ararami Atudioこちらの方法で解決
https://araramistudio.jimdo.com/2016/12/05/wpf%E3%81%A7%E5%90%8D%E5%89%8D%E3%81%8B%E3%82%89%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/
FindNameメソッド、MainWindowにもあるんだねえ
名前からの取得以外だとTextBoxのTagプロパティにScrollBarを入れておくってのもいいかな
TextBoxに数値以外は入らないようにする
これは全くわからなかったので即ググって
のぶろぐ[WPF] テキストボックスに数字以外は受け付けない簡単な方法こちらから
http://shen7113.blog.fc2.com/blog-entry-22.html
こうすると文字のキーを押しても無視されるようになる
結果
できましたー
参照したところ
Stack Overflow - Where Developers Learn, Share, & Build Careersありがとうございます
https://stackoverflow.com/
rksoftware | C#でいろいろ調べたりしたことのメモ
https://rksoftware.wordpress.com/
Android Apps - Ararami Atudio
https://araramistudio.jimdo.com/
のぶろぐ
http://shen7113.blog.fc2.com/
至った経緯
Extended WPF Toolkit
Extended WPF Toolkit™ Community Edition - Home
http://wpftoolkit.codeplex.com/
Extended WPF Toolkitっていう便利なものの中にNumericUpDownみたいなのがあって
これが使えればいいんだけど
今のバージョンだとバグがあるみたいで
アプリの対象を64bitにするとデザイン画面に表示されない
こんな感じなので使うのを諦めた
次にPixtack紫陽花2ndのときにはあちこち参考にして、ユーザーコントロールで作ったのがあるけど、手間がかかった割にイマイチなできに終わったのでそれも使いたくなくて、簡単に作る方法ないかなあって探していたのよねえ、そこでStack Overflowで見つかったのがScrollBarを使う方法!
今回は満足なものができたので記事にした次第
今まではVisualBasicばかりだったけど、今回はC#
バブルソートの記事以来2回目かな
Numericはヌメリック派です!
nullはヌルなんだからNumericはヌメリックなんだよなあ
でもASUSはアサス派
関連記事
2018/04/03、これで毎回同じのを作らなくて済むようになったかも
WindowsFormのNumericUpDownみたいなのをWPFのユーザーコントロールでDLLで作ってみた ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15442773.html