如何为ToolStripMenuItem项的数组创建实例?

时间:2015-06-01 07:33:50

标签: c# .net winforms

在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个项目,每个项目都是空的。 所以我知道我需要实例多少项,但出于某种原因它们都是空的。

1 个答案:

答案 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();