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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.82701 の関連記事表示

<< 0 >>
■82701  WPFでTimer処理内からButtonのClick処理実行
□投稿者/ 政吉 -(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処理は、別にプログラムの前半の方で作成してあります)
親記事 /過去ログ141より / 関連記事表示
削除チェック/

■82702  Re[1]: WPFでTimer処理内からButton
□投稿者/ Azulean -(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 の要素であり、処理するメソッドの名前としては合っていないと考えているため。

    // 質問にいたった元のエラーは「型が違う」なので、型を合わせれば一応解決します。
    // それよりは分けた方がわかりやすいと考えて上記のように書いています。
記事No.82701 のレス /過去ログ141より / 関連記事表示
削除チェック/

■82814  Re[2]: WPFでTimer処理内からButton
□投稿者/ 政吉 -(2017/02/06(Mon) 16:55:32)
    Azulean さん

    ありがとうございます。
    納得しました。
記事No.82701 のレス / END /過去ログ141より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -