32

richTextBox1以下に示すように、プログラムにリッチ テキスト ボックス ( ) があります。しかし、それを右クリックしても、「コピー、切り取り、貼り付け」ウィンドウは表示されません。この「コピー、切り取り、貼り付け」ウィンドウをリッチ テキスト ボックスで有効にする方法を教えてください。私はC#を初めて使用します。これを解決する方法を知っている場合は、段階的に教えてください

ここに画像の説明を入力

4

7 に答える 7

30

このコードで試してください

UPDATED CODE:

        private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {   //click event
                //MessageBox.Show("you got it!");
                ContextMenu contextMenu = new System.Windows.Forms.ContextMenu();
                MenuItem menuItem = new MenuItem("Cut");
                menuItem.Click += new EventHandler(CutAction);
                contextMenu.MenuItems.Add(menuItem);
                menuItem = new MenuItem("Copy");
                menuItem.Click += new EventHandler(CopyAction);
                contextMenu.MenuItems.Add(menuItem);
                menuItem = new MenuItem("Paste");
                menuItem.Click += new EventHandler(PasteAction);
                contextMenu.MenuItems.Add(menuItem);

                richTextBox1.ContextMenu = contextMenu;
            }
        }
        void CutAction(object sender, EventArgs e)
        {
            richTextBox1.Cut();
        }

        void CopyAction(object sender, EventArgs e)
        {
            Graphics objGraphics;
            Clipboard.SetData(DataFormats.Rtf, richTextBox1.SelectedRtf);
            Clipboard.Clear();
        }

        void PasteAction(object sender, EventArgs e)
        {
            if (Clipboard.ContainsText(TextDataFormat.Rtf))
            {
                richTextBox1.SelectedRtf
                    = Clipboard.GetData(DataFormats.Rtf).ToString();
            }
        } 

メモ帳などの別のアプリケーションでコピーペーストする場合は(without styles )、次のメソッドを置き換えてください

       void CopyAction(object sender, EventArgs e)
        {
            Clipboard.SetText(richTextBox1.SelectedText);
        }

        void PasteAction(object sender, EventArgs e)
        {
            if (Clipboard.ContainsText())
            {
                richTextBox1.Text
                    += Clipboard.GetText(TextDataFormat.Text).ToString();
            }
        }  
于 2013-09-23T18:44:32.390 に答える
3

Thilina Hが提供するソリューションは、いくつかのバグを除いて優れていると思います。

  1. MouseUpイベントにより、2 回目のクリック後に右クリックが開始されます。MouseUpイベントではなく、MouseDownイベントを使用することをお勧めします。

  2. 2 番目に提供されたCopyActionメソッドをテストしました。私の場合、CopyActionメソッドは入力文字をコピーしませんでした。次のようにコードを編集する必要がありました。

    Clipboard.SetText(richTextBox1.SelectedText.Replace("\n", "\r\n"));
    
  3. richTextBox1.SelectedTextが空の場合、プログラムは例外を示しました。以下に示すCopyActionメソッドを編集して、問題を修正しました。

        if (chatBox.SelectedText != null && chatBox.SelectedText != "")
        {
            Clipboard.SetText(richTextBox1.SelectedText.Replace("\n", "\r\n"));
        }
    

ハッピーコーディング!

于 2014-08-14T03:31:43.177 に答える
3

標準の RichTextBox には、切り取り、コピー、貼り付けのためのコンテキスト メニューが含まれていません。ただし、この記事には、独自の実装に必要な完全なコードが含まれています。

于 2013-09-23T18:45:56.293 に答える
0

@Jaexに感謝

https://stackoverflow.com/a/36624233/5132252

https://stackoverflow.com/a/435510/5132252

    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
    internal static extern IntPtr GetFocus();

    private Control GetFocusedControl()
    {
        Control focusedControl = null;
        // To get hold of the focused control:
        IntPtr focusedHandle = GetFocus();
        if (focusedHandle != IntPtr.Zero)
            // Note that if the focused Control is not a .Net control, then this will return null.
            focusedControl = Control.FromHandle(focusedHandle);
        return focusedControl;
    }

    private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if (Clipboard.ContainsText())
        {
            var FocusedControl = GetFocusedControl();

            if (FocusedControl != null)
                switch (FocusedControl.GetType().Name)
                {
                    case "RichTextBox":
                        {
                            var RichTextBox = FocusedControl as RichTextBox;
                            RichTextBox.Paste();
                            break;
                        }
                    case "TextBox":
                        {
                            var TextBox = FocusedControl as TextBox;
                            TextBox.Paste();
                            break;
                        }

                }
        }
    }
于 2016-05-27T17:52:07.767 に答える