Seasons.NET

ちょっとした技術ブログです

プラグイン実装メモ(1)

プラグインのアセンブリをロードしたら、
ツールバーにアイコンで登録して、そのアイコンをクリックしたら
プラグインが呼ばれるメモ。

ツールバーボタンを派生して、メンバに
プラグインを関連づけておく。
クリックされたら、sender = このとき押されたボタンを指すから
それをキャストして、関連づけされているプラグインを取得する。

 1 /// <summary>
 2 /// プラグインボタンを作成する
 3 /// </summary>
 4 /// <param name="ipi"></param>
 5 /// <returns></returns>
 6 private PluginButton CreatePluginButton(IPlugin ipi)
 7 {
 8     if( ipi == null )
 9         return null;
10 
11     PluginButton pBtn = new PluginButton();
12     pBtn.CheckOnClick = true;
13     pBtn.DisplayStyle = ToolStripItemDisplayStyle.Image;
14     //pBtn.Image = 関連付けされたリソース ipi.Image
15     pBtn.ImageTransparentColor = Color.Magenta;
16     pBtn.BackColor = Color.Black;
17     pBtn.Name = ipi.Name;
18     pBtn.Size = new Size(23, 22);
19     pBtn.Text = ipi.Name;
20     // プラグインを関連づけ
21     pBtn.SelectedPlugin = ipi;
22     // クリックイベントを登録
23     pBtn.Click += new EventHandler(pBtn_Click);
24 
25     return pBtn;
26 }
27 
28 void pBtn_Click(object sender, EventArgs e)
29 {
30     // 呼ばれたプラグインのボタンを取得する
31     PluginButton self = sender as PluginButton;
32 
33     // 関連づけされたプラグインを取得できる。
34     MessageBox.Show(self.SelectedPlugin.Name);
35 
36     // ごにょごにょする
37 }
38 }
39 
40 class PluginButton : ToolStripButton
41 {
42     private IPlugin plugin = null;
43 
44     /// <summary>
45     /// 関連づけしているプラグイン
46     /// </summary>
47     public IPlugin SelectedPlugin
48     {
49         get { return plugin; }
50         set { plugin = value; }
51     }
52 }