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

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

新規登録して質問してみよう
ただいま回答率
85.47%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

943閲覧

VB、コンボボックスの選択よって、編集できるコンボボックスを変更する

anpan___

総合スコア28

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/06/11 12:12

複数のコンボボックスを用意し、メインとなるmissiontypeBoxの値の変更に伴い、

Enabledの調整を行なっています。
自分なりにある知識でとりあえずの実装になってしまいましたが、見にくくて仕方がないと思っています。

こちらを見やすく書くアドバイス等いただければ幸いです…。

どうぞよろしくお願いします。

missiontypeBox
B1 と B1-2 は重なり合っており、洗濯によって前面、背面を調整し、アイテムの調整をしています。

同様にB2 とB2-2もです。

VB.NET

1 2Private Sub missiontypeBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles missiontypeBox.SelectedIndexChanged 3 If Not missiontypeBox.Text = "" AndAlso missiontypeBox.Enabled = false Then 4 Select Case missiontypeBox.Text 5 Case "パターン1" 6 7 Box1.Enabled = True 8 Box2.Enabled = False 9 Box3.Enabled = True 10 Box4.Enabled = True 11 Box5.Enabled = False 12 13 'toStationを最前面に 14 Box2-2.BringToFront() 15 Box2-2.Enabled = True 16 17 Case "パターン2" 18 Box1.Enabled = False 19 Box2.Enabled = False 20 Box3.Enabled = True 21 Box4.Enabled = True 22 Box5.Enabled = False 23 24 Box1-2.BringToFront() 25 Box1-2.Enabled = False 26 Box2-2.Enabled = True 27 28 Case "パターン3" 29 Box1.Enabled = False 30 Box2.Enabled = True 31 Box3.Enabled = True 32 Box4.Enabled = False 33 Box5.Enabled = False 34 35 Box1-2.BringToFront() 36 Box1-2Station.Enabled = False 37 Box2-2.BringToFront() 38 Box2-2.Enabled = False 39 40 Case Else 41 42 End Select 43 ' ********************************************************************************************************** 44 ' missiontypeBoxに変更があったとき、入力値をリセットする 45 ' ********************************************************************************************************** 46 Box1.SelectedIndex = -1 47 Box2.SelectedIndex = -1 48 Box3.SelectedIndex = -1 49 Box4.SelectedIndex = -1 50 Box5.SelectedIndex = -1 51 Box1-2.SelectedIndex = -1 52 Box2-2.SelectedIndex = -1 53 End If 54 End Sub 55

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

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

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

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

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

hope_mucci

2020/06/12 06:01

とりあえず、パターン毎に登場するBoxの数がまちまちなのが気になりますが(そういうもんならいいのですが) どういう点が「見にくくて仕方がない」と考えていますか?
guest

回答2

0

ttyp03さんの回答とほぼ同じですが

VBNET

1Private Sub ChangeControlEnable(ParamArray values As (Target As Control, enable As Boolean)()) 2 3 For Each value In values 4 value.Target.Enabled = value.enable 5 Next 6 7End Sub 8 9Private Sub missiontypeBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles missiontypeBox.SelectedIndexChanged 10 11 If missiontypeBox.Text = "" AndAlso missiontypeBox.Enabled = false Then 12 Exit Sub 13 End If 14 15 Select Case missiontypeBox.Text 16 Case "パターン1" 17 ChangeControlEnable((Box1, True), (Box2, False), (Box3, True), (Box4, True), (Box5, True), (Box2-2, True)) 18 19 'toStationを最前面に 20 Box2-2.BringToFront() 21 22 Case "パターン2" 23 ChangeControlEnable((Box1, False), (Box2, False), (Box3, True), (Box4, True), (Box5, False), (Box1-2, False), (Box2-2, True)) 24 25 Box1-2.BringToFront() 26 27 Case "パターン3" 28 ChangeControlEnable((Box1, False), (Box2, True), (Box3, True), (Box4, False), (Box5, False), (Box1-2Station, False), (Box2-2, False)) 29 30 Box1-2.BringToFront() 31 Box2-2.BringToFront() 32 33 Case Else 34 35 End Select 36 37 ' ********************************************************************************************************** 38 ' missiontypeBoxに変更があったとき、入力値をリセットする 39 ' ********************************************************************************************************** 40 Box1.SelectedIndex = -1 41 Box2.SelectedIndex = -1 42 Box3.SelectedIndex = -1 43 Box4.SelectedIndex = -1 44 Box5.SelectedIndex = -1 45 Box1-2.SelectedIndex = -1 46 Box2-2.SelectedIndex = -1 47End Sub

のほうが関数をコールする側でプロパティを変化させるコントロールを視認できるので好みです。

投稿2020/06/12 06:42

YAmaGNZ

総合スコア10288

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

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

ttyp03

2020/06/12 08:29

ほぅ、そういう書き方もできるんですね。 参考になりました。
guest

0

ベストアンサー

この処理ならこんなもんじゃないかと思いますが、多少無理にソース整形を私なりにした場合の例を載せておきます。

VBNET

1Private Sub SetBoxesEnable(b1 As Boolean, b2 As Boolean, b3 As Boolean, b4 As Boolean, b5 As Boolean) 2 Box1.Enabled = b1 3 Box2.Enabled = b2 4 Box3.Enabled = b3 5 Box4.Enabled = b4 6 Box5.Enabled = b5 7End Sub 8 9Private Sub missiontypeBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles missiontypeBox.SelectedIndexChanged 10 11 If missiontypeBox.Text = "" AndAlso missiontypeBox.Enabled = false Then 12 Exit Sub 13 End If 14 15 Select Case missiontypeBox.Text 16 Case "パターン1" 17 SetBoxesEnable(True, False, True, True, False) 18 'toStationを最前面に 19 Box2-2.BringToFront() 20 Box2-2.Enabled = True 21 22 Case "パターン2" 23 SetBoxesEnable(False, False, True, True, False) 24 Box1-2.BringToFront() 25 Box1-2.Enabled = False 26 Box2-2.Enabled = True 27 28 Case "パターン3" 29 SetBoxesEnable(False, True, True, False, False) 30 Box1-2.BringToFront() 31 Box1-2Station.Enabled = False 32 Box2-2.BringToFront() 33 Box2-2.Enabled = False 34 35 Case Else 36 37 End Select 38 39 ' missiontypeBoxに変更があったとき、入力値をリセットする 40 Box1.SelectedIndex = -1 41 Box2.SelectedIndex = -1 42 Box3.SelectedIndex = -1 43 Box4.SelectedIndex = -1 44 Box5.SelectedIndex = -1 45 Box1-2.SelectedIndex = -1 46 Box2-2.SelectedIndex = -1 47 48End Sub 49

コーディングする際のポイントとして主に以下に注意しています。

  • ネストを深くしない
  • 同じ処理は共通処理化
  • 処理ごとに適度な間隔(行間)を空ける

もちろんもっと他にも色々ありますが、上の3つは最低限のポイントですかね。

投稿2020/06/12 06:13

ttyp03

総合スコア16998

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問