アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windowsフォームアプリでストップウォッチの機能を使いたいのですが

( 1 ) 表示の機能として、デジタル数字が0.1秒単位で進んでいく様子をLabel等に表示させるには?

( 2 ) 内部の機能として、Button等でスタート、ストップ、リセットを行うには?


( 2 )については、StopwatchクラスのStopとStartメソッドを用いるというのまでは突き止めましたがここまでは正しいでしょうか。Buttonクリックイベントハンドラとインスタンス化とメソッド使用方法自体は最低限わかります。

Visual C# 2012を使っています。
ほぼ初心者レベルなので最低限の用語しか理解できないですが、宜しくお願いします。

A 回答 (2件)

>「タイマーなりスレッドなり」というのはどういう事でしょう?



まず、実験として
ボタンを1個配置して、そこに
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
を記述して実行

追加したボタンを押すたびに
値が変わる事を確認

逆に言えば、ボタンを押さなきゃ変わらない事を確認したって事なので、
定期的に実行されるイベントに
Label.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
を記述すれば良い

で、定期的に実行されるイベントを持つのが
「タイマーなりスレッドなり」と言う事

>タイマーというとTimerコントローラの事ですか?
Timer コントロールの事


>また
>LabelのTextに時間を代入する文はどの位置で何のイベントハンドラーで記入すればいいでしょうか?
がまさに ↓ これ
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";

Label1.Text
↑ラベル1のテキストプロパティ に

= sw.ElapsedMilliseconds
↑ストップウォッチの、経過時間(ミリ秒)を


.toString() + " ミリ秒";
↑文字列に変換して、後ろに" ミリ秒"とつけてセットする


この後ろにリフレッシュ関数を付けるほうが良いかも
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
Label1.Refresh();//← Label1 再描画指示
    • good
    • 0
この回答へのお礼

返答が遅れて申し訳ありません。
全体的にこんがらがって分からない状態なので、今回は改めさせていただきます。
ご回答は大事な資料として今後参考にさせていただきます。
どうもありがとうございました。

お礼日時:2014/03/19 22:42

>( 2 )については、StopwatchクラスのStopとStartメソッドを用いるというのまでは突き止めましたが


>ここまでは正しいでしょうか

大丈夫でしょう

以下は大まかな流れ


宣言
private System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

スタートボタン押下の処理
if (sw.IsRunning) { sw.Stop(); }
sw.Reset();
sw.Start();

ストップボタン押下の処理
if (sw.IsRunning) { sw.Stop(); }


タイマーなりスレッドなり
Label.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";

この回答への補足

「タイマーなりスレッドなり」というのはどういう事でしょう?
タイマーというとTimerコントローラの事ですか?
また
LabelのTextに時間を代入する文はどの位置で何のイベントハンドラーで記入すればいいでしょうか?

以下のコード(一部割愛)を実行しようとしたところビルドエラーが出ました。

public Form1()
{
InitializeComponent();
}

private Stopwatch sw = new Stopwatch();

label1.Text = sw.ElapsedMilliseconds.ToString();

private void button1_Click(object sender, EventArgs e)
{
if (sw.IsRunning) { sw.Stop(); }

sw.Reset();
sw.Start();
}

private void button2_Click(object sender, EventArgs e)
{
if (sw.IsRunning) { sw.Stop(); }
}

ここの
label1.Text = sw.ElapsedMilliseconds.ToString(); の行で
'('と'='が無効なトークンと出てしまいました。

補足日時:2014/03/07 20:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!