実現したいこと
TrackBarでスライダーを実装し、スライダーの動きに合わせてNumericUpDownの数値を変更するようにしました。
同じコントロールを複数しようしたいため、ユーザーコントロールで実装しています。
1.現在、スクロールバーをクリックしても5ずつ移動する形となっており、その処理をクリックした位置までスライドさせるようにしたいです。
2.画像の「明るい」のコントロールのみ、値の範囲を1~2.55にし、Incrementを0.01にしたいです。(明るさなのにその範囲はおかしくない?と思うかもしれませんが、そこは考えないでください)
3.Delegateを設定し、音量や明るさを変えたときにリアルタイムで関数が呼ばれるようにしたいです。
発生している問題・分からないこと
1.調べたのですが、やり方が分かりませんでした。
2.TrackBarがint型でdouble型をいれることができませんでした。また、NumericUpDownはdecimal型でプロパティのIncrementに0.01を入れることが出来ませんでした。
3.ユーザーコントロールでTrackBarとNumericUpDownを配置しているため、スライダーを動かした時のチェンジイベントが走りません。
そのため、form1で音量と明るさを設定する関数をユーザーコントロール側でDelegateを用いて利用したいです。
正直、Delegateがよく分かっていないので、説明が下手ですみません。
該当のソースコード
Form1.cs
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace スライダー 12{ 13 public partial class Form1 : Form 14 { 15 UserControl1 UserControl1 = new UserControl1 (); 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 21 22 private void Form1_Load(object sender, EventArgs e) 23 { 24 //userControl12.NumericUpDownIncrement = 0.01; 25 } 26 27 public void Volume() 28 { 29 // trackbarの値を取得 30 int value = userControl11.TrackBar1; 31 // 変更された値をもとに音量を反映させる処理 32 SetVolume(value); 33 } 34 35 36 public void Brightness() 37 { 38 // trackbarの値を取得 39 int value = userControl12.TrackBar1; 40 // 変更された値をもとに明るさを反映させる処理 41 SetBrightness(value); 42 } 43 44 45 public void SetVolume(int value) 46 { 47 // 音量を設定する処理 48 } 49 50 public void SetBrightness(int value) // 一旦iut型 51 { 52 // 明るさを設定する処理 53 } 54 } 55}
UserControl1.cs
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace スライダー 12{ 13 public partial class UserControl1 : UserControl 14 { 15 16 public int TrackBar1 17 { 18 get { return trackBar1.Value; } 19 } 20 21 public int NumericUpDownIncrement 22 { 23 set { numericUpDown1.Increment = value; } 24 } 25 26 public UserControl1() 27 { 28 InitializeComponent(); 29 } 30 31 private void trackBar1_Scroll(object sender, EventArgs e) 32 { 33 numericUpDown1.Text = trackBar1.Value.ToString(); 34 } 35 36 private void UserControl1_Load(object sender, EventArgs e) 37 { 38 trackBar1.ValueChanged += new EventHandler(trackBar1_Scroll); 39 } 40 41 private void numericUpDown1_ValueChanged(object sender, EventArgs e) 42 { 43 trackBar1.Value = (int)numericUpDown1.Value; 44 } 45 } 46}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
TrackBarに関する情報が少なく、有益な情報が得られませんでした。
また、Delegateについてはサンプルコードを書いてみてもよくわからなかったため、お力添えを願いたく存じます。
補足
2つの処理くらいだったらわざわざユーザーコントロールにせずチェンジイベントでDelegate使う必要もないと思う方もいるかもしれませんが、同じコントロールを増やす予定なのでユーザーコントロールとしています。
回答2件
あなたの回答
tips
プレビュー