在运行时添加到条形菜单
本文关键字:菜单 运行时 添加 | 更新日期: 2023-09-27 18:10:03
OK,我有一个字符串列表(实际上是文件名),我想创建一个文件菜单动态形式。
所以取我的文件名列表,目录字符串的第一个代码条和文件后缀(额外的问题,我如何将两个删除行包装成一个?)
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_变量发送给填充。openconfig方法。
所以添加项目工作得很好,只是我如何添加事件处理?
我想我可以把它发送到一个默认的方法,在原始数组中搜索完整的文件名,并通过这种方式跟踪它。但是,当我将项目添加到菜单栏时,我当然可以做到这一点。
Thank you
亚伦是的,最后我添加了
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
}
,看看我怎么把它整理一下:)
为帮助的家伙欢呼,只是喜欢这么多方法你可以剥猫的皮:)
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);
如果我正确理解了这一点,您大概有这个openconfig方法,您希望能够响应任何文本。
作为事件处理程序传递的方法必须是void MethodName (object sender, EventArgs e)的形式,所以你不能直接传递字符串给它。
然而,一旦你在你的事件句柄消息中,你就可以调用相关的消息。如: subItem.Click += new EventHandler(subItem_Click)
...
void subItem_Click (object sender, EventArgs e)
{
ToolStripMenuItem toolstripItem = (ToolStripMenuItem)sender;
yourObject.openconfig(toolstripItem.Text)
}
如果你的对象在这个范围内不可用,你可以把你的事件处理程序放在你的对象中,并做同样的事情。