質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

3099閲覧

PictureBox をクリックしたらスタートし、タイマーを使って 1 秒毎に表示を更新する時計

mimurat

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/04/16 11:33

編集2017/04/16 12:50

###前提・実現したいこと
C#で簡易的な時計を作っています
画像がクリックされた時に更新しながら表示する時計です

###発生している問題・エラーメッセージ

変数を作成した時に取得した値は表示されるのですが、Timerを使っての時間の更新も行う方法がわかりません

###該当のソースコード

C#

1namespace DesktopClock 2{ 3 public partial class Form1 : Form 4 { 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 static public String data1 = DateTime.Now.ToString("yyyy/MN/dd/HH/mm"); 10 11 static void timer1_Tick(object sender, EventArgs e) 12 { 13 static public String data1 = DateTime.Now.ToString("yyyy年MM月dd日HH:mm"); 14 } 15 private void pictureBox1_Click(object sender, EventArgs e) 16 { 17 label1.Text = String.Format("{0}", data1); 18 } 19 } 20}

###試したこと
グローバル変数を利用すると{}の外でも値を変更できると聞き、利用しようとしました。

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft VisualStudio, .NetFramework4.5.2を利用しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/04/16 12:22

クリックしたときだけ今の時間がわかる時計ですか?
mimurat

2017/04/16 12:30

いいえ、一度表示させたらそのまま表示させ続けます。
Zuishin

2017/04/16 12:40

「画像がクリックされた時に更新しながら表示する時計です」はわかりにくくありませんか? もっと長く書いてもいいんですよ。PictureBox をクリックしたらスタートし、タイマーを使って 1 秒毎に表示を更新する時計ではありませんか?
mimurat

2017/04/16 12:48

そうですね、ありがとうございます
Zuishin

2017/04/16 13:18

どういたしまして。
guest

回答2

0

新たにプロジェクトを作り直し、再度同じ構成で書き直したところ、思った通りに動作しました。

C#

1private void pictureBox1_Click(object sender, EventArgs e) 2{ 3timer1.Start(); 4} 5 6private void timer1_Tick(object sender, EventArgs e) 7{ 8label1.Text = DateTime.Now.ToString("yyyy年MM月dd日HH:mm"); 9}

投稿2017/04/18 15:15

mimurat

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

C#

1static public String data1 = DateTime.Now.ToString("yyyy/MN/dd/HH/mm");

これではdata1という名前の変数を定義して、現在時刻をセットするということになります。
ですので、timer1_Tick内ではtimer1_Tick内のみで使えるローカル変数で宣言されてしまいます。

C#

1data1 = DateTime.Now.ToString("yyyy年MM月dd日HH:mm");

これでdata1という変数に値をセットすることになります。

投稿2017/04/16 12:34

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimurat

2017/04/16 12:47

申し訳ありません、static void timer1_Tickの括弧の中を書き換え、エラーなく実行できるようにはなったのですが、クリックされたあと表示された時計が更新されません
YAmaGNZ

2017/04/16 14:59

timer1_Tick内ではdata1に現在時刻の文字列を代入しているだけで、描画しているわけではありません。data1が変更されたからといって、自動でlabel1.Textが変更されるわけでもありません。 クリックされた時に時計が開始されるというのであれば、クリックイベントでtimer1を開始し timer1_Tickでlabelを更新してやる必要があります。
mimurat

2017/04/17 15:01

private void pictureBox1_Click(object sender, EventArgs e) { timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { label1.Text = DateTime.Now.ToString("yyyy年MM月dd日HH:mm"); } このように書いてみたのですがlabel1のテキストが変わりません
YAmaGNZ

2017/04/17 22:07

同じコードを試しましたが、正常に動作しました。 pictureBox1のClickイベントが登録されているか timer1のTickイベントが登録されているか timer1のIntervalプロパティの値 を確認してみてください。
mimurat

2017/04/18 15:13

新たにプロジェクトを作り直し、再度同じ構成で書き直したところ、思った通りに動作しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問