在form1的顶部:
ToolStripMenuItem[] items;
在构造函数中:
for (int i = 0; i < items.Length; i++)
{
items[i] = new ToolStripMenuItem();
recentFilesToolStripMenuItem.DropDownItems.AddRange(items);
}
if (!File.Exists(@"e:\RecentFiles.txt"))
{
recentfiles = new StreamWriter(@"e:\RecentFiles.txt");
recentfiles.Close();
}
else
{
lines = File.ReadAllLines(@"e:\RecentFiles.txt");
}
在它使用单项之前,我在form1的顶部为它创建了一个实例。 但我想添加DropDownItems项目数组。而且我没有多少物品可以让它无限制。
然后我有这个事件:
private void recentFilesToolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
for (int i = 0; i < lines.Length; i++)
{
items[i].Text = lines[i];
}
}
当我使用我在MouseEnter事件中执行的单个项目时:
item.Text = "hello world";
但是现在我想从文本文件中添加项目,它可以是1项或200项,问题是项目在构造函数中为空。
我现在在构造函数中将其更改为:
if (!File.Exists(@"e:\RecentFiles.txt"))
{
recentfiles = new StreamWriter(@"e:\RecentFiles.txt");
recentfiles.Close();
}
else
{
lines = File.ReadAllLines(@"e:\RecentFiles.txt");
items = new ToolStripMenuItem[lines.Length];
}
在这种情况下,lines.Length是3。 但是现在当我查看项目时,我看到3个项目,每个项目都是空的。 所以我知道我需要实例多少项,但出于某种原因它们都是空的。
答案 0 :(得分:1)
似乎您的主要问题事实上您事先并不知道items[]
的长度;对于 Linq 来说,这样的问题是一个很好的任务,类似的东西:
private ToolStripMenuItem[] items;
...
在构造函数中:
items = File
.ReadLines(@"e:\RecentFiles.txt")
.Select(line => new ToolStripMenuItem() {
Text = line
})
.ToArray();
...
// if items are used in AddRange only
// you have no need neither of ToArray() nor in private field
recentFilesToolStripMenuItem.DropDownItems.AddRange(items);
如果您想要,例如,只需要10个第一个最近的文件:
items = File
.ReadLines(@"e:\RecentFiles.txt")
.Take(10)
.Select(line => new ToolStripMenuItem() {
Text = line
})
.ToArray();