回答編集履歴

2

見直しキャンペーン中

2023/07/26 13:22

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -1,265 +1,133 @@
1
1
  使っていない`BackgroundWorker bw;`があるあたり、
2
-
3
2
  [【C#】簡単なストップウォッチを作ろう その2 - HeyCHのブログ](https://heych.hatenablog.com/entry/2020/03/28/004304)
4
-
5
3
  [【C#】簡単なストップウォッチを作ろう その3 - HeyCHのブログ](https://heych.hatenablog.com/entry/2020/03/29/011712)
6
-
7
4
  こちらを参考にした(もしそうであれば**質問に明記**してください)ふしがありますが、行を追加するだけにしては少し冗長ですね。
8
5
 
9
-
10
-
11
6
  `DataGridView.Rows.Add`には、`params`で`Object`配列をとるものがあります。
12
-
13
7
  そのためカンマで並べて渡せば、割合良しなにやってくれます。
14
-
15
8
  [DataGridViewRowCollection.Add メソッド (System.Windows.Forms) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridviewrowcollection.add#System_Windows_Forms_DataGridViewRowCollection_Add_System_Object___)
16
-
17
-
18
9
 
19
10
  ラップ時間は、今の経過時間から前回の経過時間を引けばいいですね。
20
11
 
12
+ ---
21
13
 
14
+ 提示コードから下記のコントロールがフォームにあるとします。
15
+ * `Timer timer1` 時計用
16
+ * `Timer timer2` ストップウォッチ用
17
+ * `Label label1` 時計表示
18
+ * `Label label2` ストップウォッチ表示
19
+ * `Button button1` [スタート/ストップ]
20
+ * `Button button2` [リセット]
21
+ * `Button button3` [ラップ]
22
+ * `DataGridView dataGridView1` ラップ表示
23
+
24
+ ```cs
25
+ using System;
26
+ using System.Diagnostics;
27
+ using System.Windows.Forms;
28
+
29
+ namespace Questions317361
30
+ {
31
+ public partial class Form1 : Form
32
+ {
33
+ private Stopwatch stopWatch = new Stopwatch();
34
+
35
+ //bool sw = false; // stopWatch.IsRunningを見ればいいのでいらない
36
+
37
+ private TimeSpan ts; // 前回の経過時間
38
+
39
+ public Form1()
40
+ {
41
+ InitializeComponent();
42
+ timer1.Start();
43
+
44
+ label2.Text = stopWatch.Elapsed.ToString();
45
+ button3.Enabled = false;
46
+
47
+ // DataGridViewの設定(デザイナでやってもよい)
48
+ dataGridView1.AllowUserToAddRows = false; // ユーザーによる行の追加禁止
49
+ dataGridView1.ReadOnly = true; // ユーザーによる編集の禁止
50
+ dataGridView1.ColumnCount = 3;
51
+ dataGridView1.Columns[0].HeaderText = "#"; // ラップ数
52
+ dataGridView1.Columns[1].HeaderText = "ラップ";
53
+ dataGridView1.Columns[2].HeaderText = "スプリット";
54
+ }
55
+
56
+ private void timer1_Tick(object sender, EventArgs e)
57
+ {
58
+ label1.Text = DateTime.Now.ToLongTimeString();
59
+ }
60
+
61
+ private void timer2_Tick(object sender, EventArgs e)
62
+ {
63
+ label2.Text = stopWatch.Elapsed.ToString();
64
+ }
65
+
66
+ private void button1_Click(object sender, EventArgs e)
67
+ {
68
+ if (stopWatch.IsRunning) // もしくは if (timer2.Enabled)
69
+ {
70
+ stopWatch.Stop();
71
+ timer2.Stop();
72
+ button1.Text = "スタート";
73
+ button2.Enabled = true;
74
+ button3.Enabled = false;
75
+
76
+ // 雑いw
77
+ // ストップウォッチに詳しくないのですが、ストップでラップも入るんですよね?
78
+ button3_Click(null, null);
79
+ }
80
+ else
81
+ {
82
+ stopWatch.Start();
83
+ timer2.Start();
84
+ button1.Text = "ストップ";
85
+ button2.Enabled = false;
86
+ button3.Enabled = true;
87
+ }
88
+ }
89
+
90
+ private void button2_Click(object sender, EventArgs e)
91
+ {
92
+ stopWatch.Reset();
93
+ label2.Text = stopWatch.Elapsed.ToString();
94
+
95
+ dataGridView1.Rows.Clear(); // 行のクリア
96
+ ts = stopWatch.Elapsed; // 経過時間リセット ts=TimeSpan.Zeroと同じ
97
+ }
98
+
99
+ private void button3_Click(object sender, EventArgs e)
100
+ {
101
+ int number = dataGridView1.Rows.Count + 1; // ラップ数 DataGridViewの行数+1
102
+ TimeSpan split = stopWatch.Elapsed; // (初めのスタートからの)今の経過時間
103
+ TimeSpan lap = split - ts; // 今の経過時間-前回の経過時間=ラップ時間
104
+ ts = split; // 次のために今の経過時間を取っておく
105
+
106
+ dataGridView1.Rows.Add("ラップ" + number, lap, split); // 行の追加
107
+ }
108
+ }
109
+ }
110
+ ```
22
111
 
23
112
  ---
24
113
 
25
-
26
-
27
- 提示コードから下記のコントロールがフォームにあるとします。
28
-
29
- * `Timer timer1` 時計用
30
-
31
- * `Timer timer2` ストップウォッチ用
32
-
33
- * `Label label1` 時計表示
34
-
35
- * `Label label2` ストップウォッチ表示
36
-
37
- * `Button button1` [スタート/ストップ]
38
-
39
- * `Button button2` [リセット]
40
-
41
- * `Button button3` [ラップ]
42
-
43
- * `DataGridView dataGridView1` ラップ表示
44
-
45
-
46
-
47
- ```C#
48
-
49
- using System;
50
-
51
- using System.Diagnostics;
52
-
53
- using System.Windows.Forms;
54
-
55
-
56
-
57
- namespace Questions317361
58
-
59
- {
60
-
61
- public partial class Form1 : Form
62
-
63
- {
64
-
65
- private Stopwatch stopWatch = new Stopwatch();
66
-
67
-
68
-
69
- //bool sw = false; // stopWatch.IsRunningを見ればいいのでいらない
70
-
71
-
72
-
73
- private TimeSpan ts; // 前回の経過時間
74
-
75
-
76
-
77
- public Form1()
78
-
79
- {
80
-
81
- InitializeComponent();
82
-
83
- timer1.Start();
84
-
85
-
86
-
87
- label2.Text = stopWatch.Elapsed.ToString();
88
-
89
- button3.Enabled = false;
90
-
91
-
92
-
93
- // DataGridViewの設定(デザイナでやってもよい)
94
-
95
- dataGridView1.AllowUserToAddRows = false; // ユーザーによる行の追加禁止
96
-
97
- dataGridView1.ReadOnly = true; // ユーザーによる編集の禁止
98
-
99
- dataGridView1.ColumnCount = 3;
100
-
101
- dataGridView1.Columns[0].HeaderText = "#"; // ラップ数
102
-
103
- dataGridView1.Columns[1].HeaderText = "ラップ";
104
-
105
- dataGridView1.Columns[2].HeaderText = "スプリット";
106
-
107
- }
108
-
109
-
110
-
111
- private void timer1_Tick(object sender, EventArgs e)
112
-
113
- {
114
-
115
- label1.Text = DateTime.Now.ToLongTimeString();
116
-
117
- }
118
-
119
-
120
-
121
- private void timer2_Tick(object sender, EventArgs e)
122
-
123
- {
124
-
125
- label2.Text = stopWatch.Elapsed.ToString();
126
-
127
- }
128
-
129
-
130
-
131
- private void button1_Click(object sender, EventArgs e)
132
-
133
- {
134
-
135
- if (stopWatch.IsRunning) // もしくは if (timer2.Enabled)
136
-
137
- {
138
-
139
- stopWatch.Stop();
140
-
141
- timer2.Stop();
142
-
143
- button1.Text = "スタート";
144
-
145
- button2.Enabled = true;
146
-
147
- button3.Enabled = false;
148
-
149
-
150
-
151
- // 雑いw
152
-
153
- // ストップウォッチに詳しくないのですが、ストップでラップも入るんですよね?
154
-
155
- button3_Click(null, null);
156
-
157
- }
158
-
159
- else
160
-
161
- {
162
-
163
- stopWatch.Start();
164
-
165
- timer2.Start();
166
-
167
- button1.Text = "ストップ";
168
-
169
- button2.Enabled = false;
170
-
171
- button3.Enabled = true;
172
-
173
- }
174
-
175
- }
176
-
177
-
178
-
179
- private void button2_Click(object sender, EventArgs e)
180
-
181
- {
182
-
183
- stopWatch.Reset();
184
-
185
- label2.Text = stopWatch.Elapsed.ToString();
186
-
187
-
188
-
189
- dataGridView1.Rows.Clear(); // 行のクリア
190
-
191
- ts = stopWatch.Elapsed; // 経過時間リセット ts=TimeSpan.Zeroと同じ
192
-
193
- }
194
-
195
-
196
-
197
- private void button3_Click(object sender, EventArgs e)
198
-
199
- {
200
-
201
- int number = dataGridView1.Rows.Count + 1; // ラップ数 DataGridViewの行数+1
202
-
203
- TimeSpan split = stopWatch.Elapsed; // (初めのスタートからの)今の経過時間
204
-
205
- TimeSpan lap = split - ts; // 今の経過時間-前回の経過時間=ラップ時間
206
-
207
- ts = split; // 次のために今の経過時間を取っておく
208
-
209
-
210
-
211
- dataGridView1.Rows.Add("ラップ" + number, lap, split); // 行の追加
212
-
213
- }
214
-
215
- }
216
-
217
- }
218
-
219
- ```
220
-
221
-
222
-
223
- ---
224
-
225
-
226
-
227
114
  > コード自体が全く分からない状態です。ネットをあさってはみたのですがなかなか見つからず困っています。なので、皆さんが何かをプログラムしたいと思った時に参考にしているサイトや本などでも構いませんので教えていただきたいです。
228
115
 
229
-
230
-
231
116
  C#でフォームプログラミングであれば、環境としては最強レベルです。
232
-
233
117
  強力なIDE(Visual Studio)と、日本語でも豊富に情報があります。
234
118
 
235
-
236
-
237
119
  問題はコピペプログラミングからの脱却です。
238
-
239
120
  いくら情報があったとしても要望通りのものはさすがにないでしょうから、改造したり組み合わせしたりすることになります。
240
121
 
241
-
242
-
243
122
  例えば`DataGridView`であれば、今回は列の設定方法と行の追加が分かればいいでしょう。
244
-
245
123
  「datagridview 行追加」で検索し、トップに出たここを見てみますか。
246
-
247
124
  [【C#入門】DataGridViewの使い方(行の追加・削除、ソートも解説) | 侍エンジニアブログ](https://www.sejuku.net/blog/58436)
248
125
 
249
-
250
-
251
126
  初めに出てきたコードで目標達成です。
252
-
253
127
  さらに下に難しそうなこと(データ・バインド等)が書かれていますが、目標達成しているので気にしないことにします^^;
254
-
255
-
256
128
 
257
129
  検証用のプロジェクトを新たに作り、動作確認をしてもいいでしょう(例えばボタンでRows.Addしてみる・入れる値をいじってみる等)
258
130
 
259
-
260
-
261
131
  そういった積み重ねで、**理解しながら進めていく**ことになります(すべてを理解しようと思ってはいけません。必要な部分だけ「多分分かった」で十分です)
262
132
 
263
-
264
-
265
133
  こういった完成までの試行錯誤や失敗談はあまりおもてに出てきませんが、裏ではみんなやっています^^

1

params

2021/01/21 08:43

投稿

TN8001
TN8001

スコア9326

test CHANGED
@@ -8,7 +8,9 @@
8
8
 
9
9
 
10
10
 
11
- `DataGridView.Rows.Add`には`Object`配列をとるものがあるので、割合良しなにやってくれます。
11
+ `DataGridView.Rows.Add`には`params`で`Object`配列をとるものがあます。
12
+
13
+ そのためカンマで並べて渡せば、割合良しなにやってくれます。
12
14
 
13
15
  [DataGridViewRowCollection.Add メソッド (System.Windows.Forms) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridviewrowcollection.add#System_Windows_Forms_DataGridViewRowCollection_Add_System_Object___)
14
16
 
@@ -138,12 +140,12 @@
138
140
 
139
141
  timer2.Stop();
140
142
 
143
+ button1.Text = "スタート";
144
+
141
145
  button2.Enabled = true;
142
146
 
143
147
  button3.Enabled = false;
144
148
 
145
- button1.Text = "スタート";
146
-
147
149
 
148
150
 
149
151
  // 雑いw
@@ -162,12 +164,12 @@
162
164
 
163
165
  timer2.Start();
164
166
 
167
+ button1.Text = "ストップ";
168
+
165
169
  button2.Enabled = false;
166
170
 
167
171
  button3.Enabled = true;
168
172
 
169
- button1.Text = "ストップ";
170
-
171
173
  }
172
174
 
173
175
  }