c# - 将值传递给事件处理程序

标签 c# winforms event-handling menustrip

我已将一些项目动态添加到我的菜单条中,并为添加到菜单条中的每个项目触发事件(项目是从 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();
}

最佳答案

我建议您使用标记属性。它是对象,因此您需要知道在要使用它时将其转换为哪种类型。像这样

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();
}

关于c# - 将值传递给事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13002251/

相关文章:

c# - ASP.NET 按钮单击事件错误

c# - MVC - 使用 AJAX 调用导致服务器端页面验证在按钮单击时触发

c# - LINQ 中的匿名类型查询或普通查询

c# - 我如何从目录中获取所有文件,包括子目录?

c# - 寻找从 100% Web 开发转向 winforms 的人们的反馈

java - com.kami2017.app.MainActivity.onCreate上的Android Studio错误

javascript - 如何在方法中的 addEventListener 和 JavaScript 中的全局函数中的 removeEventListener 时调用 removeEventLisener

c# - 如果我将数组的大小初始化为 0 会发生什么?

c# - 是否可以在不将源移动到目标的情况下在 C# 中进行拖放?

c# winforms datagridview 添加行