C# 在运行时添加到条带菜单

C# 在运行时添加到条带菜单,c#,menu,toolstripmenu,C#,Menu,Toolstripmenu,好的,我有一个字符串列表(实际上是文件名),我想创建一个文件菜单表单 以我的文件名列表、目录字符串的第一个代码条和文件sufix为例(有一个额外的问题,我如何才能将两个删除行包装成一行?) 刚刚看到我如何能把它整理得更整洁一些:) 为帮助的家伙们干杯,我只是喜欢你可以用多少种方法剥猫皮:)如果我理解正确,你大概有这个openconfig方法,你希望能够响应任何文本 作为事件处理程序传递的方法的形式必须为void MethodName(objectsender,EventArgs e),因此不能直

好的,我有一个字符串列表(实际上是文件名),我想创建一个文件菜单表单

以我的文件名列表、目录字符串的第一个代码条和文件sufix为例(有一个额外的问题,我如何才能将两个删除行包装成一行?)

刚刚看到我如何能把它整理得更整洁一些:)


为帮助的家伙们干杯,我只是喜欢你可以用多少种方法剥猫皮:)

如果我理解正确,你大概有这个openconfig方法,你希望能够响应任何文本

作为事件处理程序传递的方法的形式必须为void MethodName(objectsender,EventArgs e),因此不能直接传递字符串

但是,一旦您在事件句柄消息中,您就可以调用相关消息。例如

 subItem.Click += new EventHandler(subItem_Click)
 ...
 void subItem_Click (object sender, EventArgs e)
 {
      ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender;
      yourObject.openconfig(toolstripItem.Text)
 }
如果对象在该范围内不可用,则可以将事件处理程序放在对象中并执行相同的操作

List<string> test_ = populate.Directorylist();

        foreach (var file_ in test_)
        {
            int len_ = file_.Length;
            string FullFilename_ = file_.Remove(0, 8);
            string filename_ = FullFilename_.Remove(filename_.Length - 4).Trim();    

            ToolStripItem subItem = new ToolStripMenuItem(filename_);
            subItem.Tag = FullFilename;
            subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line
            templatesToolStripMenuItem.DropDownItems.Add(subItem); 
还有一件事,您可以使用该类进行文件路径操作。GetFileName、GetFileNameWithoutExtension等有很多方法

string filePath = "C:\diectory\name.txt";
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath);

好的,这就是我的想法,在代码中我有file=“diectory\name.txt”而filename=“name”。当前,该项的文本是“name”,因此使用此方法,在使用事件句柄调用该方法后,我必须在该方法中查找完整的文件名。只是看起来有点像我喜欢的复制品。很容易做到,只是想知道我是否可以直接从事件传递完整的文件名。您可以使用lambda表达式,但实际上它做的是相同的:
item.Click+=(o,e)=>{ToolStripMenuItem a=(ToolStripMenuItem)o;a.openconfig(a.Text);}OK simple只需使用标记字段并使用该字段的完整文件名;)。所以是的,谢谢你的回答,应该很好:)你可以,再多做点工作,创建一个继承自ToolStripMenuItem的类,该类也有一个存储完整文件名的字符串,然后以这种方式访问它?希望Path类回答您的额外问题很高兴看到有人与您的代表一起提出相同的解决方案(或:),Path类工作得很好,感谢您的提示。
List<string> test_ = populate.Directorylist();

        foreach (var file_ in test_)
        {
            int len_ = file_.Length;
            string FullFilename_ = file_.Remove(0, 8);
            string filename_ = FullFilename_.Remove(filename_.Length - 4).Trim();    

            ToolStripItem subItem = new ToolStripMenuItem(filename_);
            subItem.Tag = FullFilename;
            subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line
            templatesToolStripMenuItem.DropDownItems.Add(subItem); 
void subItem_Click (object sender, EventArgs e)
 {
      ToolStripMenuItem toolstripItem = sender as ToolStripMenuItem;

      if (toolstripItem != null && toolstripItem.Tag != null)
      {
          yourObject.openconfig(toolstripItem.Tag.ToString))
      }
 }
string filePath = "C:\diectory\name.txt";
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath);