C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WPFでTimer処理内からButton


(過去ログ 141 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■82701 / inTopicNo.1)  WPFでTimer処理内からButtonのClick処理実行
  
□投稿者/ 政吉 (14回)-(2017/01/29(Sun) 16:43:39)

分類:[.NET 全般] 

2017/01/29(Sun) 16:45:25 編集(投稿者)
こんにちわ
現在、Visual Studio Comunity 2015 の C#、WPF で、Windwos10で動作するアプリケーションを作成しています。

タイマー処理の中で、定期的にCOMポートと通信し、COMポートの通信結果によって、画面上のButtonの _Click()イベントを実行させたいのですが

    // 周期起動Timer処理
    void timer_Tick(object sender, EventArgs e)
    {

        // 〜 この辺は通信処理

        if (sMessage == "ABC")    // 通信の結果によって、ButtonAの処理を実行したい
        {
            buttonA_Click(sender, e);
        }
    }

    void buttonA_Click(object sender, RoutedEventArgs e)
    {
        // ボタンAが押された時の処理
    }


という記述をしたのですが、
『System.EventArgs から System.Windows.RoutedEventArgs へ変換することはできません。』
というエラーが出てしまいます。
どのように記述すれば良いのでしょうか?
(周期タイマーの定義、初期化や、Start処理は、別にプログラムの前半の方で作成してあります)

引用返信 編集キー/
■82702 / inTopicNo.2)  Re[1]: WPFでTimer処理内からButton
□投稿者/ Azulean (776回)-(2017/01/29(Sun) 18:54:11)
2017/01/29(Sun) 18:56:11 編集(投稿者)
No82701 (政吉 さん) に返信
> どのように記述すれば良いのでしょうか?
> (周期タイマーの定義、初期化や、Start処理は、別にプログラムの前半の方で作成してあります)

1.イベントハンドラに書かれている処理を別のメソッドに切り出す。
2.その処理を呼ぶように変える


Windows Forms や WPF 問わず、直接イベントハンドラを呼び出すことはできますが、実際にクリックされたわけでもなく、
「ボタンを押したことにしたいではなく、ボタンが押されたときと同じ処理が実行されれば良い」なので、メソッドを抽出すべき(切り出すべき)と考えています。

例
    // 周期起動Timer処理
    void timer_Tick(object sender, EventArgs e)
    {

        // 〜 この辺は通信処理

        if (sMessage == "ABC")    // 通信の結果によって、ButtonAの処理を実行したい
        {
            ProcessForButtonA();
        }
    }

    void buttonA_Click(object sender, RoutedEventArgs e)
    {
        ProcessForButtonA();
    }

    void ProcessForButtonA()
    {
        // ボタンAが押された時の処理
    }


処理内容がわからなかったので、ProcessForButtonA と名付けましたが、処理内容に準じた名前にすることをおすすめします。
ButtonA はあくまで GUI の要素であり、処理するメソッドの名前としては合っていないと考えているため。

// 質問にいたった元のエラーは「型が違う」なので、型を合わせれば一応解決します。
// それよりは分けた方がわかりやすいと考えて上記のように書いています。

引用返信 編集キー/
■82814 / inTopicNo.3)  Re[2]: WPFでTimer処理内からButton
□投稿者/ 政吉 (15回)-(2017/02/06(Mon) 16:55:32)
Azulean さん

ありがとうございます。
納得しました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -