今更ながら、C#でクリップボードの実装をしました。

PDICみたいなクリップボード監視できないかなあ?とG先生に聞いてみたところ、下記サイトがありました。OSZありがたい
http://www.k4.dion.ne.jp/~anis7742/codevault/00130.html

早速委譲アダプタで実装です。
でも「Disposal必須」だそうで注意が必要です。

MyClipComboBox.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ABCS.UserClass
{
    public class MyClipComboBox : ComboBox, IDisposable
    {
        //クリップボード監視
        private ClipBoardWatcher cbwAdapter;

        public MyClipComboBox()
            : base()
        {
            this.cbwAdapter = new ClipBoardWatcher();
            this.cbwAdapter.DrawClipBoard += (sender, e2) =>
            {
                if (Clipboard.ContainsText())
                {
                    //this.listBox1.Items.Add(Clipboard.GetText());
                    String clipText = Clipboard.GetText();
                    if (!this.Items.Contains(clipText))
                    {
                        this.Items.Add(clipText);
                    }
                    this.SelectedItem = clipText;
                    //this.SelectedText = clipText;
                }
            };
        }

        protected override void Dispose(bool disposing)
        {
            this.cbwAdapter.Dispose();
            base.Dispose(disposing);
        }
    }
}


Disposal管理にヘルパーを実装。
単純なシングルトンです〜。

MyDisposalHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ABCS.UserClass
{
    public class MyDisposalHelper
    {
        private static List shouldDisposes = new List();

        private static MyDisposalHelper singleton = new MyDisposalHelper();
        MyDisposalHelper() { }

        public static MyDisposalHelper GetMyDisposalHelper()
        {
            return MyDisposalHelper.singleton;
        }
        public static void Add(IDisposable objDisposal )
        {
            MyDisposalHelper.shouldDisposes.Add(objDisposal);
        }
        public static void DoDispose()
        {
            foreach (IDisposable disposal in MyDisposalHelper.shouldDisposes)
            {
                disposal.Dispose();
            }
        }

    }
}

でメインフォームのOnLoadとOnClosingに下記記述を・・・

Form1.cs

private void Form1_Load(object sender, EventArgs e)
{
  //最後にdispose するオブジェクトの登録
  MyDisposalHelper.Add(this.cmbClipText);
}
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
  //クリップボード解放
  //this.cmbClipText.Dispose();
  MyDisposalHelper.DoDispose();
}