Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2022 when it's begining after/with CORONA Virus.

C#の開発環境もVSCodeで (Timer1の代わり)

7月
31
2024
Back
Alt+HOME


VSCodeにはツールボックスが無くクロックモジュールをフォームにドラッグ&ドロップというわけに行かない(らしい)。そこでChatGPT先生に聞いたところサンプルを提示してくれた。当方の事情に合わせて改装出来たので備忘録

Visual Studio IDEから移行してきたフォームのコードにTimer1の記述が有った。 タイマーのセットアップにおける記述を合わせてやれば、全て書き直す必要は無かったかも知れない。 この点については後日テストすることとした。

タイマーをセットアップする(1000ミリ秒)


    using System.Timers;
    
    	// Timerのセット
    	public void TimerInit()
    	{
    		// タイマーの設定(1000ミリ秒)
    		aTimer = new System.Timers.Timer(1000);
    
    		// タイマーイベントの設定
    		aTimer.Elapsed += OnTimeEvent;
    
    		// タイマーの自動リセットを有効にする
    		aTimer.AutoReset = true;
    
    		// タイマーを開始
    		aTimer.Enabled = true;
    	}

    これが、フォームエディターが有る Visual Studio IDE では Timer icon をドラッグ&ドロップすると FrmMain.Designer.cs に次の一行が追加される。

    private System.Windows.Forms.Timer Timer1;

セットしたタイマーによるイベントを実行


  1. UIスレッドでテキストボックスを交信するため Invoke を使用する

  2. 	private void OnTimeEvent(object? sender, ElapsedEventArgs e)
    	{
    		if (InvokeRequired)
    		{
    			Invoke(new Action(() => UpdateTextBox(e.SignalTime)));
    		}
    		else
    		{
    			UpdateTextBox(e.SignalTime);
    		}
    	}

  3. 実行されるイベントの内容(フォームのデジタル日付・時刻を更新)

  4. 
    	private void UpdateTextBox(DateTime signalTime)
    	{
    		// メッセージ受け渡し変数に代入
    		if (RbnUTC.Checked == true)
    		{
    			LblDateTime.Text = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss");
    			frmSettings.TxtScreenTime.Text = "UTC";
    		}
    		else if (RbnLocal.Checked == true)
    		{
    			LblDateTime.Text = DateTime.Now.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss");
    			frmSettings.TxtScreenTime.Text = "local";
    		}
    	}


Back
Alt+HOME