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

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

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

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

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回答

467閲覧

C# TrackBarをクリックした時にそこに移動したい。また、ユーザーコントロールにDelegateを追加したい。

mmm1111

総合スコア3

Delegates

Delegatesとは、オブジェクト指向型プログラミングにおいて、あるオブジェクトの操作を一部の他のオブジェクトに代替させる手法のこと。オブジェクトは他のデリゲートに頼って関数を実行することができます。

C#

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

Windows Forms

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

.NET Framework

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

2グッド

1クリップ

投稿2024/08/24 12:58

実現したいこと

イメージ説明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使う必要もないと思う方もいるかもしれませんが、同じコントロールを増やす予定なのでユーザーコントロールとしています。

TN8001, utm.👍を押しています

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

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

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

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

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

YAmaGNZ

2024/08/24 13:09

以前の質問を放置しないで何かしらリアクションしましょう。
TN8001

2024/08/24 14:52

質問のしっぱなしではなく、解決したなら「解決済」にしてください。 [ヘルプ|質問を解決済みにしたい](https://teratail.com/help#resolve-question) 「回答の意味が分からない」・「回答通りにしてもできない」等、解決していないのであれば回答にコメントしてください。 回答者は質問者のスキルが分からないので、「このくらいで通じるかな?」というところで回答しますが、わからなかったら遠慮なく言ってください。 ほとんどの回答者はコメントがあれば、追加の説明も快くしてくれます。
TN8001

2024/08/24 14:53 編集

> 1.現在、スクロールバーをクリックしても5ずつ移動する形となっており、その処理をクリックした位置までスライドさせるようにしたいです。 前回の質問の回答で使用した「ColorSlider」は、お気に召さなかったでしょうか? 「ColorSlider」なら何もしないでもその動作になりますが。 NuGetの利用法が分からない感じですか? > 2.画像の「明るい」のコントロールのみ、値の範囲を1~2.55にし、Incrementを0.01にしたいです。 「ColorSlider」ならValueやMaximum等がdecimalなので、NumericUpDownとも相性がいいです。 TrackBarでやるなら例えば「100倍して…」みたいなことになるんでしょうが、めんどくさいです^^; > 3.Delegateを設定し、音量や明るさを変えたときにリアルタイムで関数が呼ばれるようにしたいです。 前回の質問の回答でValueChangedイベントも定義したのですが、話が通じていませんか? それとも値を含んで通知する独自デリゲートが欲しいという意味ですか? これも何を言っているか通じていなそうなので例が必要ですかね...
mmm1111

2024/08/25 00:41

解決済みにせずすみませんでした。 NuGetの利用法については正直よくわかっていません。 もしTrackBarでの実装方法もあるならその方法を知りたいなと思いました。 独自Delegateが欲しいということで合ってると思います。 とはいえそれもよく分かっていないため、例があると非常に助かります。
YAmaGNZ

2024/08/25 02:38

UserControlにMinimum、Maximum、Incrementといった必要なプロパティをdecimal型にて実装し、内部で必要な計算をするといった形になるかと思います。 またNumericUpDownにて小数部を表示するにはDecimalPlacesプロパティを設定することになります。 numericUpDown1.DecimalPlaces = 2; numericUpDown1.Increment = (decimal)0.01; といった感じにすればよろしいかと思います。
mmm1111

2024/08/25 07:51

NuGetについてですが、使用してはいけないようでした。 そのため、TrackBarについてもクリックした時にその位置に移動する処理の方法について教えて頂きたいです。
TN8001

2024/08/25 09:43

> NuGetについてですが、使用してはいけないようでした。 ん?使用するかどうかを決められる立場ではないということですか? 個人のプロダクトかと思っていたのですが、仕事あるいは課題?ということなんでしょうか。 > そのため、TrackBarについてもクリックした時にその位置に移動する処理の方法について教えて頂きたいです。 めんどくさそうなうえ車輪の再発明は大嫌いなので、わたしは撤退させていただきます。
mmm1111

2024/08/25 13:07

ご丁寧にありがとうございました。
guest

回答2

0

TrackBarでクリックした場所につまみを持ってくる場合、クリックされた座標から自分で計算することとなります。
下記のような感じでTrackBarを継承したコントロールを作成するのがいいかと思います。
下記の物はエラー処理など一切入れていないので注意してください。

中身の簡単な解説としては以下のような処理となっています。
1.SendMessageにてTrackBarのチャネル(スライダーが移動する場所)の領域を取得しておきます。
2.MouseDownイベントにてクリックされたX座標がどの値の位置なのかを計算して求めます。(CalcValueメソッド)
3.その値をValueにセットします。
4.操作による値の変化なのでScrollイベントを発生させます。

C#

1using System; 2using System.Runtime.InteropServices; 3using System.Windows.Forms; 4using System.Drawing; 5 6public class MyTrackBar : TrackBar 7{ 8 private Rectangle channel; 9 10 private struct RECT 11 { 12 public int left, top, right, bottom; 13 } 14 15 [DllImport("user32.dll")] 16 private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, ref RECT lp); 17 18 19 // TrackBarのチャネル(スライダーが移動する場所)の領域を取得する 20 private Rectangle GetChanelRectangle() 21 { 22 const int TBM_GETCHANNELRECT = 0x400 + 26; 23 RECT rc = new RECT(); 24 SendMessage(Handle, TBM_GETCHANNELRECT, IntPtr.Zero, ref rc); 25 return new Rectangle(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); 26 } 27 28 protected override void OnHandleCreated(EventArgs e) 29 { 30 base.OnHandleCreated(e); 31 channel = GetChanelRectangle(); 32 } 33 34 protected override void OnMouseDown(MouseEventArgs e) 35 { 36 if(e.Button == MouseButtons.Left) 37 { 38 Value = CalcValue(e.X); 39 base.OnScroll(EventArgs.Empty); 40 } 41 } 42 43 protected override void OnMouseMove(MouseEventArgs e) 44 { 45 if ( e.Button == MouseButtons.Left) 46 { 47 Value = CalcValue(e.X); 48 base.OnScroll(EventArgs.Empty); 49 } 50 } 51 52 int CalcValue(int x) 53 { 54 int value = 0; 55 56 if (x < channel.Left) 57 value = Minimum; 58 else if (x > channel.Right) 59 value = Maximum; 60 else 61 { 62 double ticWidth = channel.Width / (double)(Maximum - Minimum); 63 value = (int)((x - channel.Left) / ticWidth + Minimum); 64 } 65 return value; 66 } 67} 68

そして、このmyTrackBarをUserControlにTrackBarの代わりに使い、TrackBarに設定する値をintに計算して使用するようにします。

C#

1using System; 2using System.Windows.Forms; 3 4public partial class UserControl1 : UserControl 5{ 6 7 public decimal Maximum { 8 get => numericUpDown1.Maximum; 9 10 set 11 { 12 numericUpDown1.Maximum = value; 13 myTrackBar1.Maximum = numeric2trackbar(value); 14 } 15 } 16 public decimal Minimum { 17 get => numericUpDown1.Minimum; 18 19 set 20 { 21 numericUpDown1.Minimum = value; 22 myTrackBar1.Minimum = numeric2trackbar(value); 23 } 24 } 25 26 public decimal Increment { 27 get => numericUpDown1.Increment; 28 29 set 30 { 31 numericUpDown1.Increment = value; 32 myTrackBar1.SmallChange = numeric2trackbar(numericUpDown1.Increment); 33 } 34 } 35 36 public int DecimalPlaces { 37 get => numericUpDown1.DecimalPlaces; 38 39 set 40 { 41 numericUpDown1.DecimalPlaces = value; 42 myTrackBar1.Maximum = numeric2trackbar(numericUpDown1.Maximum); 43 myTrackBar1.Minimum = numeric2trackbar(numericUpDown1.Minimum); 44 } 45 } 46 47 public decimal Value { 48 get => numericUpDown1.Value; 49 50 set 51 { 52 numericUpDown1.Value = value; 53 myTrackBar1.Value = numeric2trackbar(numericUpDown1.Value); 54 } 55 } 56 57 58 public UserControl1() 59 { 60 InitializeComponent(); 61 } 62 63 64 private void trackBar1_Scroll(object sender, EventArgs e) 65 { 66 numericUpDown1.Value = trackbar2numeric(myTrackBar1.Value); 67 } 68 69 private void numericUpDown1_ValueChanged(object sender, EventArgs e) 70 { 71 myTrackBar1.Value = numeric2trackbar(numericUpDown1.Value); 72 } 73 74 private int numeric2trackbar(decimal value) 75 { 76 return (int)(value * (decimal)Math.Pow(10, numericUpDown1.DecimalPlaces)); 77 } 78 private decimal trackbar2numeric(int value) 79 { 80 return value / (decimal)Math.Pow(10, numericUpDown1.DecimalPlaces); 81 } 82} 83

この例はValueChangedイベント等のイベント処理は入れていません。
こちらのほうはTN8001さんの回答に書いてありますので、そちらを理解されて組み込むのがいいでしょう。

投稿2024/08/25 14:26

編集2024/08/27 00:23
YAmaGNZ

総合スコア10469

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

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

0

ベストアンサー

1.現在、スクロールバーをクリックしても5ずつ移動する形となっており、その処理をクリックした位置までスライドさせるようにしたいです。

NuGet禁止というわけではないようなので、「ColorSlider」を利用させていただきました。
NuGet Gallery | lioncs.ColorSlider 1.0.0

2.画像の「明るい」のコントロールのみ、値の範囲を1~2.55にし、Incrementを0.01にしたいです。

ColorSliderはMinimumSmallChange等がdecimalのため、NumericUpDownとそのまま合わせられます。

3.Delegateを設定し、音量や明るさを変えたときにリアルタイムで関数が呼ばれるようにしたいです。

単純に 「値が変更された」ことだけわかるイベントで用は足りると思いますが、独自EventArgsや独自delegateも例として併記しました。
イベントの処理と発生 | Microsoft Learn


Form1にはUserControl1を2つ置き、各プロパティやイベントをそれぞれ設定すること。

cs:Form1.cs

1using System; 2using System.Diagnostics; 3using System.Windows.Forms; 4 5namespace Qgqwsmkt45f9hwe 6{ 7 public partial class Form1 : Form 8 { 9 public Form1() 10 { 11 InitializeComponent(); 12 13 // デザイナで設定済み(設置したUserControl1をダブルクリック) 14 //userControl11.ValueChanged += UserControl11_ValueChanged; 15 //userControl12.ValueChanged += UserControl12_ValueChanged; 16 17 userControl11.ValueChanged2 += UserControl11_ValueChanged2; 18 userControl12.ValueChanged2 += UserControl12_ValueChanged2; 19 20 userControl11.ValueChanged3 += UserControl11_ValueChanged3; 21 userControl12.ValueChanged3 += UserControl12_ValueChanged3; 22 } 23 24 private void UserControl11_ValueChanged(object sender, EventArgs e) 25 { 26 Debug.WriteLine($"[ValueChanged] 音量: {userControl11.Value}"); 27 } 28 private void UserControl12_ValueChanged(object sender, EventArgs e) 29 { 30 Debug.WriteLine($"[ValueChanged] 明るさ: {userControl12.Value}"); 31 } 32 33 private void UserControl11_ValueChanged2(object sender, ValueChanged2EventArgs e) 34 { 35 Debug.WriteLine($"[ValueChanged2] 音量: {e.Value}"); 36 } 37 private void UserControl12_ValueChanged2(object sender, ValueChanged2EventArgs e) 38 { 39 Debug.WriteLine($"[ValueChanged2] 明るさ: {e.Value}"); 40 } 41 42 private void UserControl11_ValueChanged3(decimal value) 43 { 44 Debug.WriteLine($"[ValueChanged3] 音量: {value}"); 45 } 46 private void UserControl12_ValueChanged3(decimal value) 47 { 48 Debug.WriteLine($"[ValueChanged3] 明るさ: {value}"); 49 } 50 } 51}

UserControl1にはNumericUpDown・ColorSlider・Labelを1つずつ置き、各プロパティやイベントをそれぞれ設定すること。

cs:UserControl1.cs

1using System; 2using System.ComponentModel; 3using System.Windows.Forms; 4 5namespace Qgqwsmkt45f9hwe 6{ 7 // コンポーネントの既定のイベント 8 // (デザイナでコンポーネントをダブルクリックするとイベントハンドラ自動作成) 9 [DefaultEvent("ValueChanged")] 10 public partial class UserControl1 : UserControl 11 { 12 public decimal Maximum 13 { 14 get => numericUpDown1.Maximum; 15 set 16 { 17 // ValueがMaximumより大きいとエラーになるので範囲内に収める 18 Value = Clamp(Value, Minimum, value); 19 20 // それぞれに設定 21 colorSlider1.Maximum = numericUpDown1.Maximum = value; 22 } 23 } 24 25 public decimal Minimum 26 { 27 get => numericUpDown1.Minimum; 28 set 29 { 30 Value = Clamp(Value, value, Maximum); 31 colorSlider1.Minimum = numericUpDown1.Minimum = value; 32 } 33 } 34 35 public decimal Value 36 { 37 get => numericUpDown1.Value; 38 set => numericUpDown1.Value = value; 39 } 40 41 public decimal Increment 42 { 43 get => numericUpDown1.Increment; 44 set => colorSlider1.SmallChange = numericUpDown1.Increment = value; 45 } 46 47 // プロパティやイベントの説明を付けるなら、こういったものを個々に書く必要あり 48 // ↓ドキュメントコメント(DecimalPlacesにマウスオーバーした時に表示されるテキスト)をNumericUpDownから借用 49 /// <inheritdoc cref="NumericUpDown.DecimalPlaces"/> 50 // ↓デザイナのプロパティウィンドウ中の説明 51 [Description("表示する小数点以下の桁数を示します。")] 52 public int DecimalPlaces 53 { 54 get => numericUpDown1.DecimalPlaces; 55 set => numericUpDown1.DecimalPlaces = value; 56 } 57 58 // デザイナのプロパティウィンドウにTextを出すおまじない 59 [Browsable(true), Bindable(true)] 60 [EditorBrowsable(EditorBrowsableState.Always)] 61 [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 62 public override string Text { get => label1.Text; set => label1.Text = value; } 63 64 65 // 「値が変更された」ことがわかればいいならこう(NumericUpDownやTrackBarと同様) 66 public event EventHandler ValueChanged; 67 68 // 「値が〇〇に変更された」という数値も欲しいなら、 69 // ジェネリックのEventHandler<T>で独自EventArgs付きにする 70 public event EventHandler<ValueChanged2EventArgs> ValueChanged2; 71 72 // どうしても独自delegateを使いたいならお好きにどうぞ 73 public event ValueChanged3EventHandler ValueChanged3; 74 75 76 public UserControl1() 77 { 78 InitializeComponent(); 79 80 // 相互にバインド 81 numericUpDown1.DataBindings.Add(new Binding("Value", colorSlider1, "Value")); 82 colorSlider1.DataBindings.Add(new Binding("Value", numericUpDown1, "Value")); 83 84 // デザイナで設定済み 85 //numericUpDown1.ValueChanged += NumericUpDown1_ValueChanged; 86 } 87 88 private void NumericUpDown1_ValueChanged(object sender, EventArgs e) 89 { 90 // senderがnumericUpDown1になるのはイヤなので自前で発砲 91 ValueChanged?.Invoke(this, EventArgs.Empty); 92 93 // 値をValueChanged2EventArgsにセットして発砲 94 ValueChanged2?.Invoke(this, new ValueChanged2EventArgs { Value = Value }); 95 96 // 値を直に入れて発砲(delegateの定義次第) 97 ValueChanged3?.Invoke(Value); 98 } 99 100 private static decimal Clamp(decimal value, decimal min, decimal max) 101 { 102 if (value < min) return min; 103 else if (value > max) return max; 104 return value; 105 } 106 } 107 108 109 // 独自EventArgs 110 public class ValueChanged2EventArgs : EventArgs 111 { 112 public decimal Value { get; set; } 113 } 114 115 // 独自delegate(object senderを付けてもいいし、使用側でキャスト不要になるようにUserControl1 senderとしてもいいしご自由に) 116 public delegate void ValueChanged3EventHandler(decimal value); 117}

投稿2024/08/25 03:47

TN8001

総合スコア9807

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

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

mmm1111

2024/08/25 07:54

回答ありがとうございます。 Delegateについてですが、いまいち理解できませんでした。 他に参考サイトなどがあれば教えていただきたいです。
TN8001

2024/08/25 09:42

> Delegateについてですが、いまいち理解できませんでした。 デリゲートについて勉強したいのではなくて、UserControl1のValueChangedをForm1で使えるようにしたいという話なんですよね? であれば userControl11.ValueChanged += UserControl11_ValueChanged; これで十分で特にデリゲートの出番はないですが。 まあデリゲートもそんなに難しい話ではなくて、例えば「int a = 1;」と同じようにメソッドを入れられる型です。 ValueChanged3EventHandler b = UserControl11_ValueChanged3; // 定義したデリゲート Action<decimal> c = UserControl12_ValueChanged3; // 汎用デリゲート 今回の用途だとeventも絡むため、ちょっとややこしく見えるかもしれません。 [イベント - C# によるプログラミング入門 | ++C++; // 未確認飛行 C](https://ufcpp.net/study/csharp/sp_event.html#event-keyword) > 他に参考サイトなどがあれば教えていただきたいです。 う~ん。特におすすめもないですが、単純に調べると「例のための例」になってしまい意図が分かりにくかったり、どう役立つか想像しにくかったりはあるかもしれません。 EventHandler<T>やAction・Funcがあるので、デリゲートを自分で定義することもそうない気はします。 定義するより使う側(Linqとかラムダ式とか)を調べたほうが有益な気がします。
mmm1111

2024/08/25 13:08

回答ありがとうございます。 まだ解決は出来てませんが、再度色々と調べてみます。 ありがとうございました。
mmm1111

2024/08/26 20:45

今更で申し訳ないのですが、 設置したUserControl1をダブルクリックしてもloadイベントとなり、ValueChanged2にはならないのですが、どうしたらよいでしょうか?
TN8001

2024/08/27 00:47 編集

> 設置したUserControl1をダブルクリックしてもloadイベントとなり、ValueChanged2にはならないのですが、どうしたらよいでしょうか? 一旦プロジェクトのビルド(≒実行)をしてください。 それでもダメなら下記を再確認してください。 * クラスにDefaultEventはついていますか? [DefaultEvent("ValueChanged2")] public partial class UserControl1 : UserControl * ValueChanged2イベントはありますか? public event EventHandler<ValueChanged2EventArgs> ValueChanged2; それでもダメならプロパティウィンドウで設定してください^^; 1. Form1でUserControl1を選択 2. プロパティウィンドウを開く 3. プロパティウィンドウ上部のイベントボタン(ピカチュウのしっぽみたいなやつ)を押す 4. 該当イベントの上でダブルクリック
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問