2012-10-21 43 views
2

我已經動態地添加了一些項目到我的菜單條中,並觸發了每個項目添加到條帶的事件(項目是從XML文件添加的)。 接下來我要做的是將每個項目的文本傳遞給事件處理程序,以便我可以在一個線程中使用它們。這可能嗎?任何人都可以幫我解決問題嗎?將值傳遞給事件處理函數

這是我的代碼:

private void historyMenuItem_Click(object sender, EventArgs e){ 
    XmlDocument doc = new XmlDocument(); // create new xml document 
    doc.Load("..\\history.xml"); // load the xml 
    // create a new node list 
    // and select nodes from BookItems/Book 
    XmlNodeList nodeList = doc.SelectNodes("URLs/http"); 

    historyMenuItem.DropDownItems.Clear(); 
    foreach (XmlNode node in nodeList) { 
     string page = node.Attributes["page"].Value; 
     //http://msdn.microsoft.com/en-us/library/ms160990.aspx 
     ToolStripMenuItem windowNewMenu = new ToolStripMenuItem(page, null, new EventHandler(MenuItemClickHandler)); 
     historyMenuItem.DropDownItems.Add(windowNewMenu); 
    } 
} 

private void MenuItemClickHandler(object sender, EventArgs e){ 
    ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender; 
    ## HERE IS WHERE I NEED HELP: 
    UrlTextBox = (I need value of page here!); 
    this.thread = new Thread(new ThreadStart(this.httpRequestMultiThread)); 
    this.thread.Start(); 
} 

回答

4

我建議你使用標籤屬性。這是對象,所以當你想使用它時,你需要知道將它投射到哪種類型。像這樣的東西

private void historyMenuItem_Click(object sender, EventArgs e) 
    { 
     XmlDocument doc = new XmlDocument(); // create new xml document 
     doc.Load("..\\history.xml"); // load the xml 
     XmlNodeList nodeList = doc.SelectNodes("URLs/http"); // create a new node list 
                   // and select nodes from BookItems/Book 
     historyMenuItem.DropDownItems.Clear(); 
     foreach (XmlNode node in nodeList) // for each node in the node list 
     { 
      string page = node.Attributes["page"].Value; 

      ToolStripMenuItem windowNewMenu = new ToolStripMenuItem(page, null, new EventHandler(MenuItemClickHandler)); 
      windowMenuItem.Tag = page; 
      historyMenuItem.DropDownItems.Add(windowNewMenu); 
     } 
    } 
private void MenuItemClickHandler(object sender, EventArgs e) 
{ 
    ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender; 

    UrlTextBox.Text = (string)clickedItem.Tag; 
    this.thread = new Thread(new ThreadStart(this.httpRequestMultiThread)); 
    this.thread.Start(); 
} 
+0

謝謝!它像一個魅力... –

1

您可以使用ToolStripMenuItemTag屬性來存儲有關該項目的任何附加數據(例如,頁面的值):

windowNewMenu.Tag = node.Attributes["page"].Value; 

標籤有object型,因此您需要在檢索值期間施放它:

ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender; 
string page = clickedItem.Tag as string; 

但是在您當前的解決方案中,頁面的值分配給Text菜單項的屬性(創建項目時)。所以,你可以從該屬性檢索值:

string page = clickedItem.Text; 
+0

+1從我那裏。最新編輯的好處是,我沒有注意到該頁面是他的ToolStripMenuItem的文本,直到您寫下它。 –

相關問題