繁体   English   中英

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

[英]How do i make instance for array of ToolStripMenuItem items?

在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个项目,问题是在构造函数中项目为null。

我现在在构造函数中将其更改为:

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个项目,其中每个项目都为空。 所以我知道我需要实例化多少个项目,但由于某种原因,它们都为空。

看来,您的主要问题在于您不预先知道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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM