簡體   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