前提・実現したいこと
c#で多機能デジタル時計を作成しています。
機能の一つにラップタイムの測定機能を付けたいです。
ラップタイム測定のために、今の経過時間から前回(ボタンを押したとき)の経過時間を引きたいと思っています。その際のコードに苦戦しています。
発生している問題・エラーメッセージ
上記の"(今の経過時間)―(前回の経過時間)= ラップタイム" のコードをどう書けばよいかが分かりません。
dataGridviewを使用して記入しようと考えています。
下記のコードはラップ機能実装のために用意した実験ソース用のファイルに記入しているものです。
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.Diagnostics; 11 12namespace 時計_実験コード 13{ 14 public partial class Form1 : Form 15 { 16 //時間経過をはかるためのクラス 17 Stopwatch myStopWatch = new Stopwatch(); 18 //スタート・ストップボタン用 19 bool sw = false; 20 public Form1() 21 { 22 InitializeComponent(); 23 timer1.Start(); 24 } 25 26 private void Form1_Load(object sender, EventArgs e) 27 { 28 //カラム数を指定 29 dataGridView1.ColumnCount = 2; 30 31 //カラム名を指定 32 dataGridView1.Columns[0].HeaderText = "時間"; 33 dataGridView1.Columns[1].HeaderText = "ラップ"; 34 35 } 36 37 private void rap_bt_Click(object sender, EventArgs e) 38 { 39 //データを追加 40 dataGridView1.Rows.Add(label2.Text) ; //ラップボタンを押したときの"時間"の入力には成功 41 dataGridView1.Rows.Add(); //ラップタイムを表示したい 42 } 43 44 private void timer1_Tick(object sender, EventArgs e) 45 { 46 DateTime d = DateTime.Now; 47 label1.Text = d.ToLongTimeString(); 48 } 49 50 private void start_stop_bt_Click(object sender, EventArgs e) 51 { 52 if (sw == false) 53 { 54 //計測開始 55 myStopWatch.Start(); 56 //表示更新タイマー開始 57 timer2.Start(); 58 //スイッチon 59 sw = true; 60 //リセットボタン使用不可 61 reset_bt.Enabled = false; 62 //「スタート」だったボタンの表示を「ストップ」に変更 63 start_stop_bt.Text = "ストップ"; 64 } 65 else 66 { 67 //計測終了 68 myStopWatch.Stop(); 69 //表示固定 70 timer2.Stop(); 71 //スイッチoff 72 sw = false; 73 //リセットボタン使用可 74 reset_bt.Enabled = true; 75 //「ストップ」だったボタンの表示を「スタート」に変更 76 start_stop_bt.Text = "スタート"; 77 } 78 } 79 80 private void timer2_Tick(object sender, EventArgs e) 81 { 82 //label2にスタートから現在までの時間を表示させる 83 label2.Text = myStopWatch.Elapsed.ToString(); 84 } 85 86 private void reset_bt_Click(object sender, EventArgs e) 87 { 88 //ストップウォッチの内容をゼロにする 89 myStopWatch.Reset(); 90 //リセットした状態をlabelに表示する 91 label2.Text = myStopWatch.Elapsed.ToString(); 92 } 93 } 94}
試したこと
実装のために試したものがdataGridviewのセルの特定です。
セル項目に“時間(ラップボタンを押したときのラベルに表示されている時間)”、“ラップタイム”を用意しました。
この二つのうち、“時間”項目の表示はストップウォッチの時間表示に使用しているlabel2のテキストを代入する形で実装してみました。
次に“ラップタイム”項目は今回の“時間”セルに入っている時間から前回の“時間”セルに入っている時間を引いて表示しようと思い、セルの特定を行おうとしていますがその特定の仕方が分からない状態です。
ラップタイムの出し方の考え方としてあっているかもわかりませんが、その点も含めて
・セルの特定の仕方
・そもそもこの出し方で正常にラップタイムは表示されるのか、されないのであればどういった捉え方(ソースの書き方)をすればよいのか
を教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
visualstudio2019
回答2件
あなたの回答
tips
プレビュー