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

わんくま同盟

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

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

ツリー一括表示

NumericUpDownコントロールのボタンクリックを検知 /ゆうる (22/07/05(Tue) 17:49) #100127
Re[1]: NumericUpDownコントロールのボタンクリックを検知 /kiku (22/07/05(Tue) 18:22) #100128
│└ Re[2]: NumericUpDownコントロールのボタンクリックを検知 /kiku (22/07/06(Wed) 10:11) #100130
│  └ Re[3]: NumericUpDownコントロールのボタンクリックを検知 /KOZ (22/07/06(Wed) 11:18) #100131
│    └ Re[4]: NumericUpDownコントロールのボタンクリックを検知 /kiku (22/07/06(Wed) 11:26) #100132
Re[1]: NumericUpDownコントロールのボタンクリックを検知 /KOZ (22/07/05(Tue) 21:20) #100129
  └ Re[2]: NumericUpDownコントロールのボタンクリックを検知 /モイモイプルカー (22/07/06(Wed) 11:41) #100133
    └ Re[3]: NumericUpDownコントロールのボタンクリックを検知 /KOZ (22/07/06(Wed) 12:25) #100134
      ├ Re[4]: NumericUpDownコントロールのボタンクリックを検知 /KOZ (22/07/06(Wed) 12:45) #100135
      └ Re[4]: NumericUpDownコントロールのボタンクリックを検知 /モイモイプルカー (22/07/06(Wed) 13:32) #100136
        └ Re[5]: NumericUpDownコントロールのボタンクリックを検知 /KOZ (22/07/07(Thu) 08:32) #100148 解決済み


親記事 / ▼[ 100128 ] ▼[ 100129 ]
■100127 / 親階層)  NumericUpDownコントロールのボタンクリックを検知
□投稿者/ ゆうる (1回)-(2022/07/05(Tue) 17:49:42)

分類:[.NET 全般] 

Visualbasic2019で、VB.NETを開発しています。
掲題の通り、NumericUpDownコントロールのUpDownボタンをクリックしたのを検知したいです。
やりたい事として、2つのNumericUpDownコントロールでそれぞれ「年」と「月」を表示し、NumericUpDownコントロールのボタンで値を増減させます。
「月」の方で、最大値の時にUPボタンを押すと、「年」を+1して、「月」を最小値(1)に変更
最小値の時にDownボタンを押した時、「年」を−1して、「月」を最大値(12)にしたいです。
ValueChangeだと、最大値でUPボタンを押してもイベントは発生しませんでした(逆も同じ)
何か方法はありませんでしょうか。

[ □ Tree ] 返信 編集キー/

▲[ 100127 ] / ▼[ 100130 ]
■100128 / 1階層)  Re[1]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ kiku (275回)-(2022/07/05(Tue) 18:22:09)
No100127 (ゆうる さん) に返信
> Visualbasic2019で、VB.NETを開発しています。
> 掲題の通り、NumericUpDownコントロールのUpDownボタンをクリックしたのを検知したいです。
> やりたい事として、2つのNumericUpDownコントロールでそれぞれ「年」と「月」を表示し、NumericUpDownコントロールのボタンで値を増減させます。
> 「月」の方で、最大値の時にUPボタンを押すと、「年」を+1して、「月」を最小値(1)に変更
> 最小値の時にDownボタンを押した時、「年」を−1して、「月」を最大値(12)にしたいです。
> ValueChangeだと、最大値でUPボタンを押してもイベントは発生しませんでした(逆も同じ)
> 何か方法はありませんでしょうか。
>

確か、Clickイベントだったらイベント発生した記憶があります。
[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100128 ] / ▼[ 100131 ]
■100130 / 2階層)  Re[2]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ kiku (276回)-(2022/07/06(Wed) 10:11:26)
No100128 (kiku さん) に返信
> ■No100127 (ゆうる さん) に返信
> 確か、Clickイベントだったらイベント発生した記憶があります。

C#で申し訳ないのですが、Clickイベントでもできそうですね。

    public partial class Form1 : Form
    {
        private decimal value;
        public Form1()
        {
            InitializeComponent();
            value = numericUpDown1.Value;
        }
        private void numericUpDown1_Click(object sender, EventArgs e)
        {
            if(numericUpDown1.Maximum == numericUpDown1.Value)
            {
                if(numericUpDown1.Value == value)
                {
                    Console.WriteLine($"最大値を越えた");
                }
            }
            if (numericUpDown1.Minimum == numericUpDown1.Value)
            {
                if (numericUpDown1.Value == value)
                {
                    Console.WriteLine($"最小値を越えた");
                }
            }
            value = numericUpDown1.Value;
        }
    }

[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100130 ] / ▼[ 100132 ]
■100131 / 3階層)  Re[3]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ KOZ (258回)-(2022/07/06(Wed) 11:18:43)
No100130 (kiku さん) に返信
> C#で申し訳ないのですが、Clickイベントでもできそうですね。

ボタン以外をクリックしても Click イベントが発生します。(^_^;)
マウスの位置から上下どちらのボタンをクリックしたかどうかを判定するのは結構手間ですよ。


[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100131 ] / 返信無し
■100132 / 4階層)  Re[4]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ kiku (277回)-(2022/07/06(Wed) 11:26:38)
No100131 (KOZ さん) に返信
> ■No100130 (kiku さん) に返信
>>C#で申し訳ないのですが、Clickイベントでもできそうですね。
>
> ボタン以外をクリックしても Click イベントが発生します。(^_^;)
> マウスの位置から上下どちらのボタンをクリックしたかどうかを判定するのは結構手間ですよ。

えーーー、そうなんですね。
ご指摘ありがとうございます。勉強になります。
では、当方の回答は取り下げさせてください。(^_^;)
[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100127 ] / ▼[ 100133 ]
■100129 / 1階層)  Re[1]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ KOZ (257回)-(2022/07/05(Tue) 21:20:05)
2022/07/05(Tue) 21:31:55 編集(投稿者)
No100127 (ゆうる さん) に返信
> ValueChangeだと、最大値でUPボタンを押してもイベントは発生しませんでした(逆も同じ)

NumericUpDown コントロールを継承して UpButton/DownButton メソッドをオーバーライドするとボタンを押したタイミングをキャッチできます。

Imports System.ComponentModel

Public Class NumericUpDownEx
    Inherits NumericUpDown

    Public Event UpButtonClicked As CancelEventHandler
    Public Event DownButtonClicked As CancelEventHandler

    Public Overrides Sub UpButton()
        Dim ce As New CancelEventArgs()
        RaiseEvent UpButtonClicked(Me, ce)
        If Not ce.Cancel Then
            MyBase.UpButton()
        End If
    End Sub

    Public Overrides Sub DownButton()
        Dim ce As New CancelEventArgs()
        RaiseEvent DownButtonClicked(Me, ce)
        If Not ce.Cancel Then
            MyBase.DownButton()
        End If
    End Sub

End Class

年の NumericUpDownEx を numYear、月の NumericUpDownEx を numMonth とすると

    Private Sub numMonth_UpButtonClicked(sender As Object,
                            ce As System.ComponentModel.CancelEventArgs) Handles numMonth.UpButtonClicked
        If numMonth.Value = numMonth.Maximum AndAlso numYear.Value < numYear.Maximum Then
            numYear.Value += 1
            numMonth.Value = numMonth.Minimum
            ce.Cancel = True
        End If
    End Sub

    Private Sub numMonth_DownButtonClicked(sender As Object,
                            ce As System.ComponentModel.CancelEventArgs) Handles numMonth.DownButtonClicked
        If numMonth.Value = numMonth.Minimum AndAlso numYear.Value > numYear.Minimum Then
            numYear.Value -= 1
            numMonth.Value = numMonth.Maximum
            ce.Cancel = True
        End If
    End Sub

こんな感じで実現できます。

[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100129 ] / ▼[ 100134 ]
■100133 / 2階層)  Re[2]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ モイモイプルカー (1回)-(2022/07/06(Wed) 11:41:00)
No100129 (KOZ さん) に返信
> 2022/07/05(Tue) 21:31:55 編集(投稿者)
>
> ■No100127 (ゆうる さん) に返信
>>ValueChangeだと、最大値でUPボタンを押してもイベントは発生しませんでした(逆も同じ)
>
> NumericUpDown コントロールを継承して UpButton/DownButton メソッドをオーバーライドするとボタンを押したタイミングをキャッチできます。
>
> Imports System.ComponentModel
>
> Public Class NumericUpDownEx
> Inherits NumericUpDown
>
> Public Event UpButtonClicked As CancelEventHandler
> Public Event DownButtonClicked As CancelEventHandler
>
> Public Overrides Sub UpButton()
> Dim ce As New CancelEventArgs()
> RaiseEvent UpButtonClicked(Me, ce)
> If Not ce.Cancel Then
> MyBase.UpButton()
> End If
> End Sub
>
> Public Overrides Sub DownButton()
> Dim ce As New CancelEventArgs()
> RaiseEvent DownButtonClicked(Me, ce)
> If Not ce.Cancel Then
> MyBase.DownButton()
> End If
> End Sub
>
> End Class
>
> 年の NumericUpDownEx を numYear、月の NumericUpDownEx を numMonth とすると
>
> Private Sub numMonth_UpButtonClicked(sender As Object,
> ce As System.ComponentModel.CancelEventArgs) Handles numMonth.UpButtonClicked
> If numMonth.Value = numMonth.Maximum AndAlso numYear.Value < numYear.Maximum Then
> numYear.Value += 1
> numMonth.Value = numMonth.Minimum
> ce.Cancel = True
> End If
> End Sub
>
> Private Sub numMonth_DownButtonClicked(sender As Object,
> ce As System.ComponentModel.CancelEventArgs) Handles numMonth.DownButtonClicked
> If numMonth.Value = numMonth.Minimum AndAlso numYear.Value > numYear.Minimum Then
> numYear.Value -= 1
> numMonth.Value = numMonth.Maximum
> ce.Cancel = True
> End If
> End Sub
>
> こんな感じで実現できます。
>

横から申し訳ないです。
用途は違いますが、丁度同じことを探していたのですが、これはどの様に実装すればよろしいのでしょうか。
VS2019でVBでプログラムを作成しているのですが、これをそのままコピペさせていたいたのですが、

> Private Sub numMonth_UpButtonClicked(sender As Object,
> ce As System.ComponentModel.CancelEventArgs) Handles numMonth.UpButtonClicked
上記「numMonth.UpButtonClicked」の部分で、「イベント'UpButtonClicked'が見つかりません。」とエラー表示されてしまいます。
初歩的なことなのかもしれませんが、教えていただけますでしょうか。


[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100133 ] / ▼[ 100135 ] ▼[ 100136 ]
■100134 / 3階層)  Re[3]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ KOZ (259回)-(2022/07/06(Wed) 12:25:20)
No100133 (モイモイプルカー さん) に返信
> 上記「numMonth.UpButtonClicked」の部分で、「イベント'UpButtonClicked'が見つかりません。」とエラー表示されてしまいます。
> 初歩的なことなのかもしれませんが、教えていただけますでしょうか。

(1) プロジェクトに NumericUpDownEx.vb を追加し、Class NumericUpDownEx を Imports System.ComponentModel から貼り付けます。
(2) ビルドすると、フォームデザイナのツールボックスにコントロールが追加されます。
(3) そこからドラッグ&ドロップしてフォームに NumericUpDownEx を2つ追加します。
(4) 名前を numYear, numMonth に変えます。
(5) numMonth_UpButtonClicked/numMonth_DownButtonClicked をフォームのコードに張り付けて終了。


[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100134 ] / 返信無し
■100135 / 4階層)  Re[4]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ KOZ (260回)-(2022/07/06(Wed) 12:45:38)
No100134 (KOZ) に返信

「VB.NETで自分だけのコンポーネントを作る!」
https://dxo.co.jp/blog/archives/8611

ここのスクリーンショットが参考になりそうです。
[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100134 ] / ▼[ 100148 ]
■100136 / 4階層)  Re[4]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ モイモイプルカー (3回)-(2022/07/06(Wed) 13:32:38)
No100134 (KOZ さん) に返信
> ■No100133 (モイモイプルカー さん) に返信
>>上記「numMonth.UpButtonClicked」の部分で、「イベント'UpButtonClicked'が見つかりません。」とエラー表示されてしまいます。
>>初歩的なことなのかもしれませんが、教えていただけますでしょうか。
>
> (1) プロジェクトに NumericUpDownEx.vb を追加し、Class NumericUpDownEx を Imports System.ComponentModel から貼り付けます。
> (2) ビルドすると、フォームデザイナのツールボックスにコントロールが追加されます。
> (3) そこからドラッグ&ドロップしてフォームに NumericUpDownEx を2つ追加します。
> (4) 名前を numYear, numMonth に変えます。
> (5) numMonth_UpButtonClicked/numMonth_DownButtonClicked をフォームのコードに張り付けて終了。
>
>
教えていただき、ありがとうございます。
無事実装出来ました。
[ 親 100127 / □ Tree ] 返信 編集キー/

▲[ 100136 ] / 返信無し
■100148 / 5階層)  Re[5]: NumericUpDownコントロールのボタンクリックを検知
□投稿者/ KOZ (266回)-(2022/07/07(Thu) 08:32:23)
No100136 (モイモイプルカー さん) に返信
> 教えていただき、ありがとうございます。
> 無事実装出来ました。

では解決積みにしておきます。
解決済み
[ 親 100127 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -