ここから本文です

NumericUpDownが10個(NumericUpDown0~NumericUpDown9)、その上にButtonが同じく10...

アバター

ID非公開さん

2018/2/411:41:35

NumericUpDownが10個(NumericUpDown0~NumericUpDown9)、その上にButtonが同じく10個(Button0~9)あり、

NumericUpDownを可変するとそれに対応するButtonのテキストが可変するようにプログラムを作りたいのですが、どのようにコードを書けば良いでしょうか。
下記のように書きましたが、もっとすっきり書ける方法があれば教えて下さい。

Private Sub NumericUpDown_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown0.ValueChanged,
NumericUpDown1.ValueChanged, NumericUpDown2.ValueChanged, NumericUpDown3.ValueChanged, NumericUpDown4.ValueChanged,
NumericUpDown5.ValueChanged, NumericUpDown6.ValueChanged, NumericUpDown7.ValueChanged, NumericUpDown8.ValueChanged,
NumericUpDown9.ValueChanged,

'NumericUpDownを一つにまとめてNumericUpDown型として変数定義
Dim Hensuu As NumericUpDown = CType(sender, NumericUpDown)

'NumericUpDown名を文字列として取得(どのボタンか特定)
Dim Hensuu_name As String = CType(Hensuu.Name, String)

'Hensuu名の最後の文字を取得
Dim Hensuu_name_last as string = Hensuu_name.Substring(Hensuu_name.Length-1,Hensuu_name.Length)

Select Case (Hensuu_name_last)
Case "0" : Button0.Name = NumericUpDown0.Value
Case "1" : Button1.Name = NumericUpDown1.Value
Case "2" : Button2.Name = NumericUpDown2.Value
Case "3" : Button3.Name = NumericUpDown3.Value
Case "4" : Button4.Name = NumericUpDown4.Value
Case "5" : Button5.Name = NumericUpDown5.Value
Case "6" : Button6.Name = NumericUpDown6.Value
Case "7" : Button7.Name = NumericUpDown7.Value
Case "8" : Button8.Name = NumericUpDown8.Value
Case "9" : Button9.Name = NumericUpDown9.Value
End Select

End Sub

補足コードにミスがあったので、修正します。
'Hensuu名の最後の文字を取得
Dim Hensuu_name_last as string = Hensuu_name.Substring(Hensuu_name.Length-1,1)

Select Case (Hensuu_name_last)
Case "0" : Button0.Text = NumericUpDown0.Value
Case "1" : Button1.Text = NumericUpDown1.Value
Case "2" : Button2.Text = NumericUpDown2.Value
Case "3" : Button3.Text = NumericUpDown3.Value
Case "4" : Button4.Text = NumericUpDown4.Value
Case "5" : Button5.Text = NumericUpDown5.Value
Case "6" : Button6.Text = NumericUpDown6.Value
Case "7" : Button7.Text = NumericUpDown7.Value
Case "8" : Button8.Text = NumericUpDown8.Value
Case "9" : Button9.Text = NumericUpDown9.Value
End Select

この質問は、男性に回答をリクエストしました。

閲覧数:
114
回答数:
2

違反報告

ベストアンサーに選ばれた回答

oxo********さん

2018/2/419:10:07

---------------------------------------------------
Dim s_num As NumericUpDown = CType(sender, NumericUpDown)
For i = 0 To 9
If Me.Controls("NumericUpDown" & i).Name = s_num.Name Then
Me.Controls("Button" & i).Text = CStr(s_num.Value)
Exit For
End If
Next
--------------------------------------------------

コントロールの配置が、
例えば、Form上じゃなくPanelコンテナ上に配置してる場合は
Panel.Controls(~

  • アバター

    質問者

    ID非公開さん

    2018/2/422:55:36

    ビルドはパスしましたが、実行すると、オブジェクト参照がオブジェクト インスタンスに設定されていません、と例外が発生してしまいます。

  • その他の返信(4件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2018/2/10 20:00:52

このような書き方が出来るとは知りませんでした。
ありがとうございます。

ベストアンサー以外の回答

1〜1件/1件中

hos********さん

2018/2/413:14:53

NumericUpDown_ValueChanged の後のHandleの羅列も鬱陶しいので、
コンストラクタでイベント定義して

Public Sub New()

' この呼び出しはデザイナーで必要です。
InitializeComponent()

For Each ctl As Control In Controls
Dim numCtl = TryCast(ctl, NumericUpDown)
If (numCtl IsNot Nothing) Then
If (GetButton(numCtl) IsNot Nothing) Then
AddHandler numCtl.ValueChanged, New EventHandler(AddressOf Me.NumericUpDown_ValueChanged)
End If
End If
Next

End Sub

Private Sub NumericUpDown_ValueChanged(sender As Object, e As EventArgs)

Dim numCtl As NumericUpDown = CType(sender, NumericUpDown)
Dim btnCtl As Button = GetButton(numCtl)
If (btnCtl IsNot Nothing) Then
btnCtl.Text = numCtl.Value
End If

End Sub

Private Function GetButton(numCtl As NumericUpDown) As Button
Dim buttonCtl As Button = Nothing
Dim index As String = numCtl.Name.Replace("NumericUpDown", "")
If (Controls.ContainsKey("Button" & index)) Then
buttonCtl = TryCast(Controls("Button" & index), Button)
End If
GetButton = buttonCtl
End Function

こんな感じでしょうか。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる