[英]C# ContextMenuStrip assign at runtime
C#-在我的應用程序中,我有三個單獨的contextSensitiveMenus
在運行時,我想根據某些條件選擇使用哪個popUp menu
。 我可以在網上找到很多有關在運行時創建contextSensitiveMenus
,但與從“預定義”菜單中進行選擇無關。
我一直在擺弄:txtText.ContextMenuStrip ...,但無法正常工作。
有任何想法嗎?
假設您在確定從哪個上下文菜單中選擇了哪個選項時遇到問題。
正如我在評論中提到的那樣,我將在此處發布一個有效的示例代碼,以使您更好地理解。
首先,您必須進行枚舉,以表示上下文菜單的所有可能菜單選項。 我們將使用它來唯一標記菜單選項。 (您可以通過簡單地標記一個string
來避免這種情況,但是使用enum既簡單又干凈)
假設您有以下選擇。
public enum contextMenuOptions
{
guestOption1,
guestOption2,
guestOption3,
peopleOption1,
peopleOption2,
peopleOption3,
statOption1,
statOption2,
statOption3
}
在初始化“預定義”菜單選項時,您可以使用此枚舉標記它們,如下所示。 而且,您可以將創建的ContextMenuStrip
設置為特定的TextBox
ContextMenuStrip popUpGuest = new ContextMenuStrip();
ToolStripTextBox guestMenuitem1 = new ToolStripTextBox();
guestMenuitem1.Text = "Guest Option1";
guestMenuitem1.Tag = contextMenuOptions.guestOption1; //tagging with enum
guestMenuitem1.Click += Menuitem_Click;
popUpGuest.Items.Add(guestMenuitem1);
txtGuest.ContextMenuStrip = popUpGuest;
其他選項和其他上下文菜單的方法相同
ContextMenuStrip popUpPeople = new ContextMenuStrip();
ToolStripTextBox peopleMenuitem1 = new ToolStripTextBox();
peopleMenuitem1.Text = "people option1";
peopleMenuitem1.Tag = contextMenuOptions.peopleOption1;
peopleMenuitem1.Click += Menuitem_Click;
popUpPeople.Items.Add(peopleMenuitem1);
txtPeople.ContextMenuStrip = popUpPeople;
和
ContextMenuStrip popUpStatement = new ContextMenuStrip();
ToolStripTextBox stateMenuitem1 = new ToolStripTextBox();
stateMenuitem1.Text = "stat Option1";
stateMenuitem1.Tag = contextMenuOptions.statOption1;
stateMenuitem1.Click += Menuitem_Click;
popUpStatement.Items.Add(stateMenuitem1);
txtStatement.ContextMenuStrip = popUpStatement;
請注意,所有選項的單擊處理程序都是常見的Menuitem_Click
,因此,無論從哪個上下文菜單中選擇了哪個選項,都將調用此處理程序。 在這里,我們將提出一般解決方案。
void Menuitem_Click(object sender, EventArgs e)
{
ToolStripTextBox senderMenuItem = (ToolStripTextBox)sender;
contextMenuOptions tag = (contextMenuOptions)senderMenuItem.Tag;
TextBox textBoxToBeUpdated = null;
string optionSelected = "";
switch (tag)
{
case contextMenuOptions.guestOption1:
optionSelected = "guestOption1";
textBoxToBeUpdated = txtGuest;
break;
case contextMenuOptions.guestOption2:
optionSelected = "guestOption2";
textBoxToBeUpdated = txtGuest;
break;
case contextMenuOptions.guestOption3:
optionSelected = "guestOption3";
textBoxToBeUpdated = txtGuest;
break;
case contextMenuOptions.peopleOption1:
optionSelected = "PeopleOption1";
textBoxToBeUpdated = txtPeople;
break;
case contextMenuOptions.statOption1:
optionSelected = "StatmentOption1";
textBoxToBeUpdated = txtStatement;
break;
default:
break;
}
textBoxToBeUpdated.Text = optionSelected;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.