一旦Rich Text Box被右鍵單擊,我正在創建一個上下文菜單條。有2個選項,一個用來改變字體,另一個用來改變背景顏色。但是,一旦我單擊其中一個菜單選項,上下文菜單條就不會關閉並覆蓋顯示的對話框。我知道我可以讓它「全球化」並強迫它關閉,但我寧願不要。處理這個問題的最好方法是什麼?ContextMenuStrip一次點擊就不關閉
// If the console is right clicked then show font options
private void rtb_console_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Items.Add("Change Font");
menu.Items.Add("Change Background Color");
menu.Show(this, new Point(e.X, e.Y));
menu.ItemClicked += new ToolStripItemClickedEventHandler(menu_ItemClicked_ChangeFont);
}
}
// Determine whether to change the font or the font background color
void menu_ItemClicked_ChangeFont(object sender, ToolStripItemClickedEventArgs e)
{
Application.DoEvents(); // Read that this might help, but it doesn't
if (e.ClickedItem.Text == "Change Font")
{
FontDialog font = new FontDialog();
font.ShowColor = true;
font.Font = rtb_console.Font;
font.Color = rtb_console.ForeColor;
if (font.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
rtb_console.Font = font.Font;
rtb_console.ForeColor = font.Color;
}
}
else if (e.ClickedItem.Text == "Change Background Color")
{
ColorDialog color = new ColorDialog();
color.Color = rtb_console.BackColor;
if (color.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
rtb_console.BackColor = color.Color;
}
}
}
因此,這是發生了什麼:
。我只會把'Application.DoEvents()',看看是否會工作,但它沒有,也這條線將不起作用: '菜單。顯示(這是新的Point(eX,eY));'用你的代碼 –
對不起,我打算排除這一點。更新我的代碼。這個想法是,你不需要手動顯示上下文菜單。當您將上下文菜單分配給ContextMenuStrip屬性時,RTB將爲您處理此問題。 –
好吧,你的代碼工作,但有一些小的變化; ''ContextMenuStrip menu = new ContextMenuStrip();'必須全局聲明,其餘的必須在'public MainForm()'內部完成,並且不會自動隱藏自己,'menu.Close();'必須被添加到'menu_ItemClicked_ChangeFont'函數。一旦我做到了這一點,它工作。 –