コントロールとドキュメントの連携

コントロールからドキュメントへのドラッグ&ドロップ

新規にExcel 2007 ブックプロジェクトを作成し、カスタム作業ウインドウを作成します。カスタム作業ウインドウにラベルを配置し、複数行にまたがるテキストを表示させておきます。


まず、テキストのクリックに対応したイベントハンドラを生成します。具体的には、ラベルのプロパティから、MouseDownイベントに対応するイベントハンドラ名を入力します。


これで、イベントハンドラが生成され、表示されます。
次に、ユーザーコントロールに配置したラベルをドラッグするためのコードを書きます。


追加したコードは以下です。

    label1.DoDragDrop(label1.Text, DragDropEffects.Copy);

ビルドして実行すると、カスタム作業ウインドウ上のラベルから、ワークシートへのドラッグ&ドロップが行えます。




ドラッグ&ドロップする文字列を作る際に、セルの区切りを改行とタブで行うことができます。
以下に例を示します。

this.label1.Text = "hoge\thoge\nhoge\thoge\nhoge\thoge";


ドキュメントの変更を捕捉する(Excel編)

新規にExcel 2007 ブックプロジェクトを作成し、カスタム作業ウインドウを作成します。カスタム作業ウインドウにラベルを配置します。
UserControl1.csのコードを開き、ラベルを外部から変更できるようにプロパティを追加します。


追加するコードは以下となります。

public string LabelText
{
    get
    {
        return this.label1.Text;
    }
    set
    {
        this.label1.Text = value;
    }
}

ThisWorkbook.csのコードを開き、ドキュメント変更のイベントハンドラを実装します。


追加するコードは以下となります。

Excel.Worksheet sheet = (Excel.Worksheet)sender;
uc.LabelText = "";
foreach (Excel.Range current in range)
{
    uc.LabelText +=
        "[" + current.Row.ToString() + ", " + current.Column.ToString() + "]\n";
    uc.LabelText += (IConvertible)current.Text + "\n";
}

次に、イベントハンドラの登録を行います。


追加するコードは以下となります。

this.SheetChange +=
    new Excel.WorkbookEvents_SheetChangeEventHandler(
        ThisWorkbook_SheetChange);

ビルドして実行すると、カスタム作業ウインドウを含むドキュメントが開きます。


適当なセルに値を入力し、確定すると、カスタム作業ウインドウにその内容が表示されます。


コピー&ペーストで複数のセルを同時に変更した場合は、変更を受けた全てのセルが列挙されます。カット&ペーストの場合は、ペーストされた先のセルのみが表示されます。

ドキュメントの変更を捕捉する(Word編)

新規にWord 2007 ドキュメントプロジェクトを作成し、カスタム作業ウインドウを作成します。カスタム作業ウインドウにラベルを配置します。
UserControl1.csのコードを開き、ラベルを外部から変更できるようにプロパティを追加します。


追加するコードは以下となります。

public string LabelText
{
    get
    {
        return this.label1.Text;
    }
    set
    {
        this.label1.Text = value;
    }
}

ThisDocument.csのコードを開き、選択範囲変更のイベントハンドラを実装します。


追加するコードは以下となります。

private void ThisDocument_SelectionChange(object sender,
    Microsoft.Office.Tools.Word.SelectionEventArgs e)
{
    Word.Selection sel = e.Selection;
    if (sel.Start == sel.End)
    {
        uc.LabelText = sel.Paragraphs[1].Range.Text;
    }
    else
    {
        uc.LabelText = "ここに編集内容が表示されます";
    }
}

次に、イベントハンドラの登録を行います。
追加するコードは以下となります。

this.SelectionChange += new Microsoft.Office.Tools.Word.SelectionEventHandler(
    ThisDocument_SelectionChange);

ビルドして実行すると、カスタム作業ウインドウを含むドキュメントが開きます。


適当に入力すると、カスタム作業ウインドウに編集中のパラグラフが表示されます。