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 の要素であり、処理するメソッドの名前としては合っていないと考えているため。
// 質問にいたった元のエラーは「型が違う」なので、型を合わせれば一応解決します。
// それよりは分けた方がわかりやすいと考えて上記のように書いています。