10

デフォルトのにメニュー項目を追加したいのですContextMenuRichTextBox

新しいコンテキストメニューを作成することはできますが、デフォルトのメニューに表示されるスペルチェックの提案が失われます。

すべてを再実装せずにアイテムを追加する方法はありますか?

4

1 に答える 1

17

スペル候補、切り取り、貼り付けなどを使用して RichTextBox コンテキスト メニューを再実装するのはそれほど難しいことではありません。

コンテキスト メニューを開くイベントを次のようにフックします。

AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);

イベント ハンドラー内で、必要に応じてコンテキスト メニューを作成します。次のコマンドを使用して、既存のコンテキスト メニュー メニュー項目を再作成できます。

プライベート IList<MenuItem> GetSpellingSuggestions()
{
    List<MenuItem> spellingSuggestions = new List();
    SpellingError spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition);
    if (spellingError != null)
    {
        foreach (spellingError.Suggestions の文字列 str)
        {
            MenuItem mi = new MenuItem();
            mi.Header = str;
            mi.FontWeight = FontWeights.Bold;
            mi.Command = EditingCommands.CorrectSpellingError;
            mi.CommandParameter = str;
            mi.CommandTarget = myRichTextBox;
            spellingSuggestions.Add(mi);
        }
    }
    スペル候補を返します。
}

プライベート IList<MenuItem> GetStandardCommands()
{
    List<MenuItem> standardCommands = new List();

    MenuItem item = new MenuItem();
    item.Command = ApplicationCommands.Cut;
    standardCommands.Add(アイテム);

    item = new MenuItem();
    item.Command = ApplicationCommands.Copy;
    standardCommands.Add(アイテム);

    item = new MenuItem();
    item.Command = ApplicationCommands.Paste;
    standardCommands.Add(アイテム);

    標準コマンドを返します。
}

スペルミスがある場合は、次のようにすべて無視を作成できます。

MenuItem ignoreAllMI = new MenuItem();
ignoreAllMI.Header = "すべて無視";
ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;
ignoreAllMI.CommandTarget = textBox;
newContextMenu.Items.Add(ignoreAllMI);

必要に応じてセパレーターを追加します。それらを新しいコンテキスト メニューの項目に追加してから、ピカピカの新しい MenuItems を追加します。

ただし、実際のコンテキスト メニューを取得する方法を探し続けます。これは、近い将来に取り組む予定のものに関連するためです。

于 2008-10-17T03:07:32.890 に答える