回答編集履歴

2

見直しキャンペーン中

2023/07/17 12:44

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -1,153 +1,77 @@
1
1
  コンボボックスの順番が分かりにくかったので変えています。
2
-
3
2
  comboBox1 comboBox5 comboBox6
4
-
5
3
  comboBox2
6
-
7
4
  comboBox3
8
-
9
5
  comboBox4
10
6
 
7
+ 項目名と値が離れていて管理しにくそうなので`Dictionary`にしました。
11
8
 
12
9
 
13
- 項目名と値が離れていて管理しにくそうなのでDictionaryにしました。
14
-
15
-
16
-
17
-
18
-
19
- ```C#
10
+ ```cs
20
-
21
11
  using System;
22
-
23
12
  using System.Collections.Generic;
24
-
25
13
  using System.Data;
26
-
27
14
  using System.Linq;
28
-
29
15
  using System.Windows.Forms;
30
16
 
31
-
32
-
33
17
  namespace Questions230267
34
-
35
18
  {
36
-
37
19
  public partial class Form1 : Form
38
-
39
20
  {
40
-
41
21
  private readonly ComboBox[] itemComboBoxes;
42
-
43
22
  private readonly Dictionary<string, string[]> itemDict = new Dictionary<string, string[]>
44
-
45
23
  {
46
-
47
24
  { "項目1", new string[]{ "項目1の値", "1", "2", "3", "4" } },
48
-
49
25
  { "項目2", new string[]{ "項目2の値", "5", "6", "7", "8" } },
50
-
51
26
  { "項目3", new string[]{ "項目3の値", "9", "10", "11", "12" } },
52
-
53
27
  };
54
28
 
55
29
 
56
-
57
-
58
-
59
30
  public Form1()
60
-
61
31
  {
62
-
63
32
  InitializeComponent();
64
33
 
65
-
66
-
67
34
  // デザイナで指定してよい ここから
68
-
69
35
  comboBox1.Name = "コンボ1";
70
-
71
36
  comboBox2.Name = "コンボ2";
72
-
73
37
  comboBox3.Name = "コンボ3";
74
-
75
38
  comboBox4.Name = "コンボ4";
76
-
77
39
  comboBox1.TextChanged += ComboBox_TextChanged;
78
-
79
40
  comboBox2.TextChanged += ComboBox_TextChanged;
80
-
81
41
  comboBox3.TextChanged += ComboBox_TextChanged;
82
-
83
42
  comboBox4.TextChanged += ComboBox_TextChanged;
84
-
85
43
  comboBox5.TextChanged += ComboBox_TextChanged;
86
-
87
44
  comboBox6.DropDownStyle = ComboBoxStyle.DropDownList;
88
-
89
45
  // デザイナで指定してよい ここまで
90
-
91
-
92
-
93
46
 
94
47
 
95
48
  itemComboBoxes = new ComboBox[] { comboBox1, comboBox2, comboBox3, comboBox4 };
96
49
 
97
-
98
-
99
50
  var strsSource = itemDict.Keys.ToArray();
100
-
101
51
  foreach(var combo in itemComboBoxes)
102
-
103
52
  {
104
-
105
53
  combo.Items.Add(combo.Name);
106
-
107
54
  combo.Items.AddRange(strsSource);
108
-
109
55
  combo.SelectedIndex = 0;
110
-
111
56
  }
112
57
 
113
-
114
-
115
58
  comboBox5.Items.AddRange(itemComboBoxes.Select(x => x.Name).ToArray());
116
-
117
59
  }
118
60
 
119
-
120
-
121
61
  private void ComboBox_TextChanged(object sender, EventArgs e)
122
-
123
62
  {
124
-
125
63
  comboBox6.Items.Clear();
126
-
127
64
  var combo = itemComboBoxes.FirstOrDefault(x => x.Name == comboBox5.Text) as ComboBox;
128
-
129
65
  var item = combo?.Text;
130
-
131
66
  if(!string.IsNullOrEmpty(item) && itemDict.ContainsKey(item))
132
-
133
67
  {
134
-
135
68
  comboBox6.Items.AddRange(itemDict[item]);
136
-
137
69
  comboBox6.SelectedIndex = 0;
138
-
139
70
  }
140
-
141
71
  }
142
-
143
72
  }
144
-
145
73
  }
146
-
147
74
  ```
148
75
 
149
-
150
-
151
76
  文字を入力できるようにする(`DropDownStyle = ComboBoxStyle.DropDown`)のは必須条件でしょうか?(使い分けてるようなのでそうなんでしょうが)
152
-
153
- TextChangedですと選択値と表示がずれたりして扱いづらかったです^^;
77
+ `TextChanged`ですと選択値と表示がずれたりして扱いづらかったです^^;

1

こうか

2019/12/18 09:02

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -98,13 +98,17 @@
98
98
 
99
99
  var strsSource = itemDict.Keys.ToArray();
100
100
 
101
- comboBox1.Items.AddRange(strsSource);
101
+ foreach(var combo in itemComboBoxes)
102
102
 
103
- comboBox2.Items.AddRange(strsSource);
103
+ {
104
104
 
105
- comboBox3.Items.AddRange(strsSource);
105
+ combo.Items.Add(combo.Name);
106
106
 
107
- comboBox4.Items.AddRange(strsSource);
107
+ combo.Items.AddRange(strsSource);
108
+
109
+ combo.SelectedIndex = 0;
110
+
111
+ }
108
112
 
109
113
 
110
114
 
@@ -124,7 +128,7 @@
124
128
 
125
129
  var item = combo?.Text;
126
130
 
127
- if(!string.IsNullOrEmpty(item))
131
+ if(!string.IsNullOrEmpty(item) && itemDict.ContainsKey(item))
128
132
 
129
133
  {
130
134