好的我有一个字符串列表(实际上是文件名),我想创建一个文件菜单动态表单。
所以拿我的文件名列表,首先是目录字符串和文件sufix的代码条(对于奖金问题,如何将两个删除行包装成一个?)
List<string> test_ = populate.Directorylist();
foreach (var file_ in test_)
{
int len_ = file_.Length;
string filename_ = file_.Remove(0, 8);
filename_ = filename_.Remove(filename_.Length - 4).Trim();
ToolStripItem subItem = new ToolStripMenuItem(filename_);
subItem.Click += new EventHandler(populate.openconfig(file_)); //this is my problem line
templatesToolStripMenuItem.DropDownItems.Add(subItem);
因此,只需在列表中循环,每次都将项目添加到“templatesToolStripMenuItem”。
但我需要添加一个事件,当用户单击该项时,它会将file_varible发送到populate.openconfig方法。
所以添加项目工作正常,我该如何添加事件处理?
我想我可以将它发送到一个默认方法,该方法在原始数组中搜索完整的文件名并按照这种方式进行操作。但我确实可以这样做,因为我将项目添加到菜单栏。
谢谢
亚伦
所以最后我加了
subItem.tag = File_
....
then have the event handle to
void subItem_Click (object sender, EventArgs e) //open files from menu
{
ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender;
string filename_ = toolstripItem.Tag.ToString(); //use the tag field
populate.openconfig(filename_);
populate.Split(_arrayLists); //pass read varible dictonary to populate class to further splitting in to sections.
Populatetitle();//Next we need to populate the Titles fields and datagrid view that users will enter in the Values
}
并且刚刚看到我如何能够整理一下:)
为帮助人们干杯,只是喜欢有多少种方式可以给猫皮肤涂抹:)。
答案 0 :(得分:1)
如果我已经正确理解了这一点,你可能会有这个openconfig方法,你希望它能够响应任何文本。
作为事件处理程序传递的方法必须是void MethodName(对象发送者,EventArgs e),因此您无法直接将字符串传递给它。
但是,一旦您处于事件处理消息中,您就可以调用相关消息。例如
subItem.Click += new EventHandler(subItem_Click)
...
void subItem_Click (object sender, EventArgs e)
{
ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender;
yourObject.openconfig(toolstripItem.Text)
}
如果您的对象在该范围内不可用,您可以将事件处理程序放在对象中并执行相同的操作。
答案 1 :(得分:1)
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);
然后,您可以从事件处理程序访问Tag属性。
void subItem_Click (object sender, EventArgs e)
{
ToolStripMenuItem toolstripItem = sender as ToolStripMenuItem;
if (toolstripItem != null && toolstripItem.Tag != null)
{
yourObject.openconfig(toolstripItem.Tag.ToString))
}
}
还有一件事,你可以使用Path类进行文件路径操作。 GetFileName,GetFileNameWithoutExtension等有很多方法。
string filePath = "C:\diectory\name.txt";
string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath);