teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2019/02/10 06:10

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -24,4 +24,21 @@
24
24
  }
25
25
  }
26
26
  }
27
+ ```
28
+
29
+ # 追記
30
+
31
+ ボタンを二つ貼り付け、button2 のイベントハンドラを次のように書き換えてください。
32
+ そして button2 を押した後、button1 を押すとメッセージが表示されます。
33
+
34
+ ```C#
35
+ private async void button2_Click(object sender, EventArgs e)
36
+ {
37
+ var task = Observable
38
+ .FromEventPattern<EventArgs>(button1, nameof(Button.Click))
39
+ .Take(1)
40
+ .ToTask();
41
+ await task;
42
+ MessageBox.Show("button1 が押されました");
43
+ }
27
44
  ```

1

追記

2019/02/10 06:10

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -1,3 +1,27 @@
1
1
  他にも方法はあるでしょうが、[IObservable<T>](https://docs.microsoft.com/ja-jp/dotnet/api/system.iobservable-1?view=netframework-4.7.2) を使ってください。
2
2
 
3
- [Reactive Extensions](https://qiita.com/acple@github/items/6cfee916f09632037a6e) を使うと簡単です。これを使うには NuGet で System.Reactive をインストールする必要があります。
3
+ [Reactive Extensions](https://qiita.com/acple@github/items/6cfee916f09632037a6e) を使うと簡単です。これを使うには NuGet で System.Reactive をインストールする必要があります。
4
+
5
+ # 追記
6
+
7
+ 例えば Reactive Extensions を使ってボタンのクリックイベントを受け取るには次のようにします。
8
+
9
+ ```C#
10
+ using System;
11
+ using System.Reactive.Linq;
12
+ using System.Windows.Forms;
13
+
14
+ namespace WindowsFormsApp1
15
+ {
16
+ public partial class Form1 : Form
17
+ {
18
+ public Form1()
19
+ {
20
+ InitializeComponent();
21
+ Observable
22
+ .FromEventPattern<EventArgs>(button1, nameof(Button.Click))
23
+ .Subscribe(_ => MessageBox.Show("クリックされた!"));
24
+ }
25
+ }
26
+ }
27
+ ```