![](/img/trans.png)
[英]How do I check if items already exist in a ToolStripMenuItem DropDownItems?
[英]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.