質問編集履歴

3

修正依頼を反映

2021/09/21 01:04

投稿

yal
yal

スコア41

test CHANGED
File without changes
test CHANGED
@@ -18,208 +18,188 @@
18
18
 
19
19
 
20
20
 
21
- ~~発生している問題は数値を変数に代入ができていない点です。~~
22
-
23
21
  エラーメッセージはありません。
24
22
 
25
23
 
26
24
 
25
+ 予期しない動きの原因がわかりました。
26
+
27
+ dataGridView1_CellClick関数を通っていないことが原因でした。
28
+
29
+
30
+
31
+ ### 該当のソースコード
32
+
33
+
34
+
35
+ ```C#
36
+
37
+ //前略
38
+
39
+ namespace cs_launcher_1
40
+
41
+ {
42
+
43
+ public partial class murrelet : Form
44
+
45
+ {
46
+
47
+ private DataTable dataTable = new DataTable();
48
+
49
+ int row;
50
+
51
+
52
+
53
+ public murrelet()
54
+
55
+ {
56
+
57
+ InitializeComponent();
58
+
59
+
60
+
61
+ }
62
+
63
+
64
+
65
+ private void murrelet_Load(object sender, EventArgs e)
66
+
67
+ {
68
+
69
+ this.Text = "murrelet";
70
+
71
+ using (SQLiteConnection con = new SQLiteConnection("Data Source = test.db"))
72
+
73
+ using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT * FROM games", con))
74
+
75
+ {
76
+
77
+ adapter.Fill(dataTable);
78
+
79
+ con.Close();
80
+
81
+ }
82
+
83
+ }
84
+
85
+
86
+
87
+ void dataGridView1_CellClick(object sender, DataGridViewCellMouseEventArgs e)
88
+
89
+ {
90
+
91
+ string title;
92
+
93
+ string brand;
94
+
95
+ // if (e.ColumnIndex != -1 && e.RowIndex != -1 && e.Button == System.Windows.Forms.MouseButtons.Right)
96
+
97
+ if (e.Button == System.Windows.Forms.MouseButtons.Right)
98
+
99
+ {
100
+
101
+ row = e.RowIndex;
102
+
103
+ //テスト
104
+
105
+ Console.WriteLine(row);
106
+
107
+ }
108
+
109
+ }
110
+
111
+
112
+
113
+ //中略
114
+
115
+
116
+
117
+ private void タイトルToolStripMenuItem_Click(object sender, EventArgs e)
118
+
119
+ {
120
+
121
+ string title = (string)dataTable.Rows[row][1];
122
+
123
+ Clipboard.SetText(title);
124
+
125
+ }
126
+
127
+ }
128
+
129
+ }
130
+
131
+ ```
132
+
133
+
134
+
135
+ ```C#
136
+
137
+ //Form1.Designer.cs
138
+
139
+
140
+
141
+ //dataGridView1の部分
142
+
143
+ this.dataGridView1.AllowUserToAddRows = false;
144
+
145
+ this.dataGridView1.AllowUserToDeleteRows = false;
146
+
147
+ this.dataGridView1.AllowUserToResizeRows = false;
148
+
149
+ this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
150
+
151
+ this.dataGridView1.ContextMenuStrip = this.contextMenuStrip1;
152
+
153
+ //追加部分
154
+
155
+ this.dataGridView1.Location = new System.Drawing.Point(0, 27);
156
+
157
+ this.dataGridView1.MultiSelect = false;
158
+
159
+ this.dataGridView1.Name = "dataGridView1";
160
+
161
+ this.dataGridView1.ReadOnly = true;
162
+
163
+ this.dataGridView1.RowTemplate.Height = 21;
164
+
165
+ this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
166
+
167
+ this.dataGridView1.Size = new System.Drawing.Size(802, 401);
168
+
169
+ this.dataGridView1.TabIndex = 0;
170
+
171
+ this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);
172
+
173
+ this.dataGridView1.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_CellClick);
174
+
175
+
176
+
177
+ //contextMenuStrip1の部分
178
+
179
+ this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
180
+
181
+ this.編集ToolStripMenuItem,
182
+
183
+ this.開くToolStripMenuItem,
184
+
185
+ this.コピーToolStripMenuItem,
186
+
187
+ this.削除ToolStripMenuItem,
188
+
189
+ this.設定ToolStripMenuItem1});
190
+
191
+ this.contextMenuStrip1.Name = "contextMenuStrip1";
192
+
193
+ this.contextMenuStrip1.Size = new System.Drawing.Size(126, 114);
194
+
195
+ ```
196
+
197
+
198
+
199
+ ### 試したこと
200
+
27
201
  追記
28
202
 
29
- 予期しない動きの原因がわかりました。
30
-
31
- dataGridView1_CellClick関数を通っていないことが原因でした。
32
-
33
- しかし、修正方法に苦戦しております。
34
-
35
- ご助言よろしくお願いします。
36
-
37
-
38
-
39
- ### 該当のソースコード
40
-
41
-
42
-
43
- ```C#
44
-
45
- //前略
46
-
47
- namespace cs_launcher_1
48
-
49
- {
50
-
51
- public partial class murrelet : Form
52
-
53
- {
54
-
55
- private DataTable dataTable = new DataTable();
56
-
57
- int row;
58
-
59
-
60
-
61
- public murrelet()
62
-
63
- {
64
-
65
- InitializeComponent();
66
-
67
-
68
-
69
- }
70
-
71
-
72
-
73
- private void murrelet_Load(object sender, EventArgs e)
74
-
75
- {
76
-
77
- this.Text = "murrelet";
78
-
79
- using (SQLiteConnection con = new SQLiteConnection("Data Source = test.db"))
80
-
81
- using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT * FROM games", con))
82
-
83
- {
84
-
85
- adapter.Fill(dataTable);
86
-
87
- con.Close();
88
-
89
- }
90
-
91
- }
92
-
93
-
94
-
95
- void dataGridView1_CellClick(object sender, DataGridViewCellMouseEventArgs e)
96
-
97
- {
98
-
99
- string title;
100
-
101
- string brand;
102
-
103
- // if (e.ColumnIndex != -1 && e.RowIndex != -1 && e.Button == System.Windows.Forms.MouseButtons.Right)
104
-
105
- if (e.Button == System.Windows.Forms.MouseButtons.Right)
106
-
107
- {
108
-
109
- row = e.RowIndex;
110
-
111
- //テスト
112
-
113
- Console.WriteLine(row);
114
-
115
- }
116
-
117
- }
118
-
119
-
120
-
121
- //中略
122
-
123
-
124
-
125
- private void タイトルToolStripMenuItem_Click(object sender, EventArgs e)
126
-
127
- {
128
-
129
- string title = (string)dataTable.Rows[row][1];
130
-
131
- Clipboard.SetText(title);
132
-
133
- }
134
-
135
- }
136
-
137
- }
138
-
139
- ```
140
-
141
-
142
-
143
- ```C#
144
-
145
- //Form1.Designer.cs
146
-
147
-
148
-
149
- //dataGridView1の部分
150
-
151
- this.dataGridView1.AllowUserToAddRows = false;
152
-
153
- this.dataGridView1.AllowUserToDeleteRows = false;
154
-
155
- this.dataGridView1.AllowUserToResizeRows = false;
156
-
157
- this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
158
-
159
- this.dataGridView1.ContextMenuStrip = this.contextMenuStrip1;
160
-
161
- //追加部分
162
-
163
- this.dataGridView1.Location = new System.Drawing.Point(0, 27);
164
-
165
- this.dataGridView1.MultiSelect = false;
166
-
167
- this.dataGridView1.Name = "dataGridView1";
168
-
169
- this.dataGridView1.ReadOnly = true;
170
-
171
- this.dataGridView1.RowTemplate.Height = 21;
172
-
173
- this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
174
-
175
- this.dataGridView1.Size = new System.Drawing.Size(802, 401);
176
-
177
- this.dataGridView1.TabIndex = 0;
178
-
179
- this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);
180
-
181
- this.dataGridView1.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_CellClick);
182
-
183
-
184
-
185
- //contextMenuStrip1の部分
186
-
187
- this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
188
-
189
- this.編集ToolStripMenuItem,
190
-
191
- this.開くToolStripMenuItem,
192
-
193
- this.コピーToolStripMenuItem,
194
-
195
- this.削除ToolStripMenuItem,
196
-
197
- this.設定ToolStripMenuItem1});
198
-
199
- this.contextMenuStrip1.Name = "contextMenuStrip1";
200
-
201
- this.contextMenuStrip1.Size = new System.Drawing.Size(126, 114);
202
-
203
- ```
204
-
205
-
206
-
207
- ### 試したこと
208
-
209
-
210
-
211
- ~~staticやクラス名.rowにしたり、(string)のやtoStringなどの型キャストもしましたがだめでした。
212
-
213
- row = e.RowIndexをrow = 12など数値に変更しましたが、反映されていませんでした。~~
214
-
215
-
216
-
217
- 追記
218
-
219
-
220
-
221
- ~~最初にint row;で宣言しているため、既定値の0が入り、 "string title = (string)dataTable.Rows[row][1];"の部分でrowが0であるため 常に1行2列目が呼び出されるという結果になります。 ちなみに他の記述部分でも"string title = (string)dataTable.Rows[row][1];"のような処理を行っており、そこは予想通りの動作をしています。しかし、その処理では変数がその関数内で完結しているため通っていると考えています。そのため、rowがおかしいのではないかと推測しました。 加えて、rowがどのように変化しているか確認しようとした点が試した点の一部でもあります。 dataGridView1_CellClickの関数でrowにdataGridの行の値を代入しようとしていますが、その時点で自分の予想していない動きをしているのか、その後で起きているのかを確認しようと考えました。 そこで、this.tooStripStatusLabel1というラベルに現在のrowの数値を出力しようとしましたが、型キャストができず、(string)をつける方法では"CS0030型'int'を'string'に変換できません"やas式では"CS0039 参照の変換、ボックス変換、アンボックス変換、折り返しの変換、または null 型の変換で、型 'int' を 'string' に変換できません"というものが出てしまい変数rowがどのような動きをしていたのか捕まえることはできませんでした。しかし、上記に記述があるように変数rowに12などの数値をいれたとしても結果は変わらないので、そこから、dataGridのrowIndexの部分でミスを犯しているわけではないことがわかります。つまり、エラーの出ていたtooStripStatusLabel1へのrowの出力以外からもわかるため、変数にそもそも代入できていないという推察にいたりました。上記のtooStripStatusLabel1でのエラーは直接的には質問とは関係がないため、わかりやすく明快な質問をしようとしていた手前、記述していませんでした。~~
222
-
223
203
 
224
204
 
225
205
  dataGridView1_CellClick関数内での変数の代入処理の下に
@@ -230,6 +210,26 @@
230
210
 
231
211
 
232
212
 
213
+ dataGridView1_CellClickをどのイベントに対して割り当てていますか。
214
+
215
+ イベントハンドラがイベントにアタッチされていない。
216
+
217
+ →CellMouseClickに割り当てられていました。
218
+
219
+
220
+
221
+ イベントの選び方が不適切かどうかはわかりませんでした。
222
+
223
+
224
+
225
+ イベントが発生していない→左クリックだと発生しています。右クリックで発生しません。
226
+
227
+
228
+
229
+ 左クリックでは関数を通っているので右クリックだと関数よりcontextMenuStripが優先されているのでしょうか。
230
+
231
+
232
+
233
233
  ### 補足情報(FW/ツールのバージョンなど)
234
234
 
235
235
 

2

予期しない動作の原因がわかったため、質問内容を一新しました。

2021/09/21 01:04

投稿

yal
yal

スコア41

test CHANGED
@@ -1 +1 @@
1
- の代入ができない
1
+ DataGridViewのCellClick関を通してcontextMenuStripを開くことができない
test CHANGED
@@ -18,12 +18,24 @@
18
18
 
19
19
 
20
20
 
21
- 発生している問題は数値を変数に代入ができていない点です。
21
+ ~~発生している問題は数値を変数に代入ができていない点です。~~
22
22
 
23
23
  エラーメッセージはありません。
24
24
 
25
25
 
26
26
 
27
+ 追記
28
+
29
+ 予期しない動きの原因がわかりました。
30
+
31
+ dataGridView1_CellClick関数を通っていないことが原因でした。
32
+
33
+ しかし、修正方法に苦戦しております。
34
+
35
+ ご助言よろしくお願いします。
36
+
37
+
38
+
27
39
  ### 該当のソースコード
28
40
 
29
41
 
@@ -128,13 +140,77 @@
128
140
 
129
141
 
130
142
 
143
+ ```C#
144
+
145
+ //Form1.Designer.cs
146
+
147
+
148
+
149
+ //dataGridView1の部分
150
+
151
+ this.dataGridView1.AllowUserToAddRows = false;
152
+
153
+ this.dataGridView1.AllowUserToDeleteRows = false;
154
+
155
+ this.dataGridView1.AllowUserToResizeRows = false;
156
+
157
+ this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
158
+
159
+ this.dataGridView1.ContextMenuStrip = this.contextMenuStrip1;
160
+
161
+ //追加部分
162
+
163
+ this.dataGridView1.Location = new System.Drawing.Point(0, 27);
164
+
165
+ this.dataGridView1.MultiSelect = false;
166
+
167
+ this.dataGridView1.Name = "dataGridView1";
168
+
169
+ this.dataGridView1.ReadOnly = true;
170
+
171
+ this.dataGridView1.RowTemplate.Height = 21;
172
+
173
+ this.dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
174
+
175
+ this.dataGridView1.Size = new System.Drawing.Size(802, 401);
176
+
177
+ this.dataGridView1.TabIndex = 0;
178
+
179
+ this.dataGridView1.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);
180
+
181
+ this.dataGridView1.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridView1_CellClick);
182
+
183
+
184
+
185
+ //contextMenuStrip1の部分
186
+
187
+ this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
188
+
189
+ this.編集ToolStripMenuItem,
190
+
191
+ this.開くToolStripMenuItem,
192
+
193
+ this.コピーToolStripMenuItem,
194
+
195
+ this.削除ToolStripMenuItem,
196
+
197
+ this.設定ToolStripMenuItem1});
198
+
199
+ this.contextMenuStrip1.Name = "contextMenuStrip1";
200
+
201
+ this.contextMenuStrip1.Size = new System.Drawing.Size(126, 114);
202
+
203
+ ```
204
+
205
+
206
+
131
207
  ### 試したこと
132
208
 
133
209
 
134
210
 
135
- staticやクラス名.rowにしたり、(string)のやtoStringなどの型キャストもしましたがだめでした。
211
+ ~~staticやクラス名.rowにしたり、(string)のやtoStringなどの型キャストもしましたがだめでした。
136
-
212
+
137
- row = e.RowIndexをrow = 12など数値に変更しましたが、反映されていませんでした。
213
+ row = e.RowIndexをrow = 12など数値に変更しましたが、反映されていませんでした。~~
138
214
 
139
215
 
140
216
 
@@ -142,7 +218,15 @@
142
218
 
143
219
 
144
220
 
145
- 最初にint row;で宣言しているため、既定値の0が入り、 "string title = (string)dataTable.Rows[row][1];"の部分でrowが0であるため 常に1行2列目が呼び出されるという結果になります。 ちなみに他の記述部分でも"string title = (string)dataTable.Rows[row][1];"のような処理を行っており、そこは予想通りの動作をしています。しかし、その処理では変数がその関数内で完結しているため通っていると考えています。そのため、rowがおかしいのではないかと推測しました。 加えて、rowがどのように変化しているか確認しようとした点が試した点の一部でもあります。 dataGridView1_CellClickの関数でrowにdataGridの行の値を代入しようとしていますが、その時点で自分の予想していない動きをしているのか、その後で起きているのかを確認しようと考えました。 そこで、this.tooStripStatusLabel1というラベルに現在のrowの数値を出力しようとしましたが、型キャストができず、(string)をつける方法では"CS0030型'int'を'string'に変換できません"やas式では"CS0039 参照の変換、ボックス変換、アンボックス変換、折り返しの変換、または null 型の変換で、型 'int' を 'string' に変換できません"というものが出てしまい変数rowがどのような動きをしていたのか捕まえることはできませんでした。しかし、上記に記述があるように変数rowに12などの数値をいれたとしても結果は変わらないので、そこから、dataGridのrowIndexの部分でミスを犯しているわけではないことがわかります。つまり、エラーの出ていたtooStripStatusLabel1へのrowの出力以外からもわかるため、変数にそもそも代入できていないという推察にいたりました。上記のtooStripStatusLabel1でのエラーは直接的には質問とは関係がないため、わかりやすく明快な質問をしようとしていた手前、記述していませんでした。
221
+ ~~最初にint row;で宣言しているため、既定値の0が入り、 "string title = (string)dataTable.Rows[row][1];"の部分でrowが0であるため 常に1行2列目が呼び出されるという結果になります。 ちなみに他の記述部分でも"string title = (string)dataTable.Rows[row][1];"のような処理を行っており、そこは予想通りの動作をしています。しかし、その処理では変数がその関数内で完結しているため通っていると考えています。そのため、rowがおかしいのではないかと推測しました。 加えて、rowがどのように変化しているか確認しようとした点が試した点の一部でもあります。 dataGridView1_CellClickの関数でrowにdataGridの行の値を代入しようとしていますが、その時点で自分の予想していない動きをしているのか、その後で起きているのかを確認しようと考えました。 そこで、this.tooStripStatusLabel1というラベルに現在のrowの数値を出力しようとしましたが、型キャストができず、(string)をつける方法では"CS0030型'int'を'string'に変換できません"やas式では"CS0039 参照の変換、ボックス変換、アンボックス変換、折り返しの変換、または null 型の変換で、型 'int' を 'string' に変換できません"というものが出てしまい変数rowがどのような動きをしていたのか捕まえることはできませんでした。しかし、上記に記述があるように変数rowに12などの数値をいれたとしても結果は変わらないので、そこから、dataGridのrowIndexの部分でミスを犯しているわけではないことがわかります。つまり、エラーの出ていたtooStripStatusLabel1へのrowの出力以外からもわかるため、変数にそもそも代入できていないという推察にいたりました。上記のtooStripStatusLabel1でのエラーは直接的には質問とは関係がないため、わかりやすく明快な質問をしようとしていた手前、記述していませんでした。~~
222
+
223
+
224
+
225
+ dataGridView1_CellClick関数内での変数の代入処理の下に
226
+
227
+ "this.toolStripStatusLabel1.Text = "通った";"と追記しました。
228
+
229
+ すると表示されていなかったので、関数を通っていないことが原因でした。
146
230
 
147
231
 
148
232
 

1

試したことやエラーメッセージについての追記。加えて補足情報を書き加えました。

2021/09/20 23:49

投稿

yal
yal

スコア41

test CHANGED
File without changes
test CHANGED
@@ -19,6 +19,8 @@
19
19
 
20
20
 
21
21
  発生している問題は数値を変数に代入ができていない点です。
22
+
23
+ エラーメッセージはありません。
22
24
 
23
25
 
24
26
 
@@ -136,10 +138,22 @@
136
138
 
137
139
 
138
140
 
141
+ 追記
142
+
143
+
144
+
145
+ 最初にint row;で宣言しているため、既定値の0が入り、 "string title = (string)dataTable.Rows[row][1];"の部分でrowが0であるため 常に1行2列目が呼び出されるという結果になります。 ちなみに他の記述部分でも"string title = (string)dataTable.Rows[row][1];"のような処理を行っており、そこは予想通りの動作をしています。しかし、その処理では変数がその関数内で完結しているため通っていると考えています。そのため、rowがおかしいのではないかと推測しました。 加えて、rowがどのように変化しているか確認しようとした点が試した点の一部でもあります。 dataGridView1_CellClickの関数でrowにdataGridの行の値を代入しようとしていますが、その時点で自分の予想していない動きをしているのか、その後で起きているのかを確認しようと考えました。 そこで、this.tooStripStatusLabel1というラベルに現在のrowの数値を出力しようとしましたが、型キャストができず、(string)をつける方法では"CS0030型'int'を'string'に変換できません"やas式では"CS0039 参照の変換、ボックス変換、アンボックス変換、折り返しの変換、または null 型の変換で、型 'int' を 'string' に変換できません"というものが出てしまい変数rowがどのような動きをしていたのか捕まえることはできませんでした。しかし、上記に記述があるように変数rowに12などの数値をいれたとしても結果は変わらないので、そこから、dataGridのrowIndexの部分でミスを犯しているわけではないことがわかります。つまり、エラーの出ていたtooStripStatusLabel1へのrowの出力以外からもわかるため、変数にそもそも代入できていないという推察にいたりました。上記のtooStripStatusLabel1でのエラーは直接的には質問とは関係がないため、わかりやすく明快な質問をしようとしていた手前、記述していませんでした。
146
+
147
+
148
+
139
149
  ### 補足情報(FW/ツールのバージョンなど)
140
150
 
141
151
 
142
152
 
153
+ Windows 10 Home 20H2
154
+
143
- Visual Studio
155
+ VisualStudioVersion = 16.0.31624.102
144
156
 
145
157
  C#
158
+
159
+ .NET framework 4.7.2