2017-07-11 7 views
0
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) 
{ 
    Clipboard.SetText(richTextBox1.SelectedText); 
} 

void PasteAction(object sender, EventArgs e) 
{ 
    if (Clipboard.ContainsText()) 
    { 
     richTextBox1.Text 
      += Clipboard.GetText(TextDataFormat.Text).ToString(); 
    } 
} 

richTextBox1にテキストをマークし、マークされたテキストを右マウスボタンでクリックすると、2回目にメニューが表示されます。richtextboxにコンテキストメニューを追加するときに、マウスの右ボタンを2回クリックしてメニューを表示する必要があるのはなぜですか?

プログラムを実行しているときにテキストをマークしていない場合は、マウスの右ボタンをクリックしてスクロールし、最後のテキストをrichTextBox1の下に選択します。

もう1つの質問は、フォームロードイベントにcontextmenu作成コードを挿入する方法です。それで、プログラムを実行するときにはcontextmenuが1回だけ作成され、マウスを右クリックするたびに作成されるのではありませんか?

答えて

1

最初のクリックでContextMenuを追加し、2回目のクリックでそれを利用できるためです。これは、最初にRichTextBoxを右クリックすると、ContextMenuが添付されていないことを意味します。コードをForm_Loadまたはコンストラクタに移動します(または、デザイナでコンテキストメニューを追加することもできます)。 ContextMenuを表示するには、MopuseClickイベントを処理する必要はありません。

関連する問題