richTextBox1
以下に示すように、プログラムにリッチ テキスト ボックス ( ) があります。しかし、それを右クリックしても、「コピー、切り取り、貼り付け」ウィンドウは表示されません。この「コピー、切り取り、貼り付け」ウィンドウをリッチ テキスト ボックスで有効にする方法を教えてください。私はC#を初めて使用します。これを解決する方法を知っている場合は、段階的に教えてください
7 に答える
このコードで試してください
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();
}
}
Thilina Hが提供するソリューションは、いくつかのバグを除いて優れていると思います。
MouseUpイベントにより、2 回目のクリック後に右クリックが開始されます。MouseUpイベントではなく、MouseDownイベントを使用することをお勧めします。
2 番目に提供されたCopyActionメソッドをテストしました。私の場合、CopyActionメソッドは入力文字をコピーしませんでした。次のようにコードを編集する必要がありました。
Clipboard.SetText(richTextBox1.SelectedText.Replace("\n", "\r\n"));
richTextBox1.SelectedTextが空の場合、プログラムは例外を示しました。以下に示すCopyActionメソッドを編集して、問題を修正しました。
if (chatBox.SelectedText != null && chatBox.SelectedText != "") { Clipboard.SetText(richTextBox1.SelectedText.Replace("\n", "\r\n")); }
ハッピーコーディング!
標準の RichTextBox には、切り取り、コピー、貼り付けのためのコンテキスト メニューが含まれていません。ただし、この記事には、独自の実装に必要な完全なコードが含まれています。
@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;
}
}
}
}