質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

2回答

414閲覧

C# WindowsFormでのtrackbarのつまみの形を変更したいです。

mmm1111

総合スコア3

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

1クリップ

投稿2024/08/18 11:45

実現したいこと

イメージ説明

Formにtrackbarを追加したのですが、スライダーのつまみの形を四角から丸に変更したいです。
また、同じようなtrackbarとnumericUpDownのセットを複数作りたいです。
現在、スライダーを動かすとその値がまた、numericUpDownに反映されるようになっています。(逆も然り)

発生している問題・分からないこと

つまみの形を変更するやり方がわかりません。
また、同じようなtrackbarとnumericUpDownのセットを作る場合、
その一つ一つに
”trackBar1.ValueChanged += new EventHandler(trackBar1_Scroll);”
”trackBar1.Value = (int)numericUpDown1.Value;”
こういったコードを書かなければなりませんか?

該当のソースコード

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void trackBar1_Scroll(object sender, EventArgs e) { numericUpDown1.Text = trackBar1.Value.ToString(); } private void Form1_Load(object sender, EventArgs e) { trackBar1.ValueChanged += new EventHandler(trackBar1_Scroll); } private void numericUpDown1_ValueChanged(object sender, EventArgs e) { trackBar1.Value = (int)numericUpDown1.Value; } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

trackbarに関する情報があまりヒットせず、解決方法がわかりませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

スライダーのつまみの形を四角から丸に変更したいです。

こちらなんかを参考にされたらどうでしょうか。
fabricelacharme/ColorSlider: ColorSlider is a trackbar control written in C#

別人がパッケージ化したもののようですが、NuGetにもありました。
NuGet Gallery | lioncs.ColorSlider 1.0.0

同じようなtrackbarとnumericUpDownのセットを複数作りたいです。

ユーザーコントロールを作ってください。
ユーザー コントロールを作成する方法 - Windows Forms .NET | Microsoft Learn

その一つ一つに
こういったコードを書かなければなりませんか?

ユーザーコントロールを作ったら書くのは1回だけです。

データバインディングする手もありますが、たいして変わらないですね^^;
[C#]DataBindingsのサンプル(自分用): なんとなく・・・

cs:Form1.cs

1using System; 2using System.Drawing; 3using System.Windows.Forms; 4 5namespace Qjnzbpwllodhgbs 6{ 7 public partial class Form1 : Form 8 { 9 public Form1() 10 { 11 // UserControl1を3つ置いてる 12 InitializeComponent(); 13 14 userControl11.ValueChanged += UserControl1_ValueChanged; 15 userControl12.ValueChanged += UserControl1_ValueChanged; 16 userControl13.ValueChanged += UserControl1_ValueChanged; 17 } 18 19 private void UserControl1_ValueChanged(object sender, EventArgs e) 20 { 21 BackColor = Color.FromArgb(255, 22 (int)userControl11.Value, 23 (int)userControl12.Value, 24 (int)userControl13.Value); 25 } 26 } 27}

cs:UserControl1.cs

1using System; 2using System.Windows.Forms; 3 4namespace Qjnzbpwllodhgbs 5{ 6 public partial class UserControl1 : UserControl 7 { 8 // numericUpDown1.Valueを外(Form1)から取得・設定できるようにラップ 9 public decimal Value 10 { 11 get => numericUpDown1.Value; 12 set => numericUpDown1.Value = value; 13 } 14 15 // ValueChangedイベントも欲しいだろうから作成 16 public event EventHandler ValueChanged; 17 18 public UserControl1() 19 { 20 // NumericUpDown・ColorSliderを1つずつ置いてる 21 InitializeComponent(); 22 23 // 相互にバインド 24 numericUpDown1.DataBindings.Add(new Binding("Value", colorSlider1, "Value")); 25 colorSlider1.DataBindings.Add(new Binding("Value", numericUpDown1, "Value")); 26 27 numericUpDown1.ValueChanged += NumericUpDown1_ValueChanged; 28 } 29 30 private void NumericUpDown1_ValueChanged(object sender, EventArgs e) 31 { 32 // Microsoft Learnのサンプルではイベントもラップしているが、 33 // senderがnumericUpDown1になるのはイヤなので自前で発砲 34 ValueChanged?.Invoke(this, EventArgs.Empty); 35 } 36 } 37}

アプリ動画


NuGetパッケージ導入手順

NuGetウィンドウを開く

  1. 「ソリューション エクスプローラー」を開く
  2. 該当のプロジェクトの「参照」を右クリックする
  3. 「NuGet パッケージの管理...」を選択する

メニューありか

インストールする

  1. 「参照」タブを選択する
  2. テキストボックスに目的のパッケージ名を入力する
  3. 目的のパッケージを選択する
  4. インストールボタンを押す

NuGetウィンドウ

以上でそのプロジェクトでそのパッケージが使用可能になります。

投稿2024/08/18 22:37

編集2024/08/25 03:16
TN8001

総合スコア9807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2024/08/18 22:38

見た目にこだわりが強いなら、WPF等XAML系の奴も試してもらいたいですね。 コードで自前描画よりよっぽど簡単ですよ^^
guest

0

外観に関しては自前で描画しなくてはならないかと思います。
https://www.codeproject.com/Articles/14378/Advanced-TrackBar-Slider-Control-with-MAC-Style-C
こちらですとソースがありますので参考になるのではないでしょうか。

またTrackBarとnumericUpDownの組み合わせですが
それぞれのペアでコードを書くのがいやなのであれば、TrackBarとnumericUpDownのユーザーコントロールを作成すれば値の連動のコードはそのユーザーコントロールで閉じることが出来ます。

投稿2024/08/18 22:12

YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問