【问题标题】:winforms menuitem.items.find not working properlywinforms menuitem.items.find 无法正常工作
【发布时间】:2016-04-27 04:12:13
【问题描述】:

我有一个简单的应用程序,我在其中添加了所有菜单项,但它们被隐藏和禁用。用户登录后,我必须根据用户启用其中一些。为此,我使用 menuitem.Find(key, true) 函数搜索所有子项,但它仅适用于 2 个项目,其余项目未找到。下面是我的代码。

ToolStripItem[] items= this.menuStrip.Items.Find(row[0].ToString(), true);

这里的 row[0] 包含菜单项的名称。

我认为这些菜单项的声明必须有一些不同,但它们是相同的。不知道为什么会这样:(。

编辑:

在看到 vishakh 的回复后,我想在这里澄清一下,这行代码处于循环中,并且在此行之前填充了变量“row”以获取要搜索的新值。下面是更短的代码再次澄清。

foreach(var row in dtNames.Rows)
{
    ToolStripItem[] items= this.menuStrip.Items.Find(row[0].ToString(), true);
    items[0].visible=true;
}

每行的第一列包含菜单项的名称。

【问题讨论】:

  • 避免这种情况的一个选择是遍历所有菜单项,然后遍历子项,看看它们的名称是否与键匹配,然后使其可见,但我想知道为什么 Find 功能无法正常工作.

标签: c# winforms visual-studio-2010


【解决方案1】:

要实现这一点,您需要获取列表中的项目总数并遍历列表。或者使用 foreach 语句。

例如:

int count = listitems.Count;
ToolStripItem[] items;
for(int I = 0; i< count; i++)
{
Items.Add(this.menuStrip.Items.Find(row[i].ToString(), true));
}

编辑:

从您的代码中可以看出,您正在 foreach 循环中初始化列表。在循环之前初始化。还将每个项目添加到列表中。根据您的代码,您只能获得一项。

你的问题不清楚。

试试这个。

ToolStripItem[] items;
foreach(var row in dtNames.Rows)
{
    items.Add(this.menuStrip.Items.Find(m => m.Property.equals(row[0].ToString())));
}

【讨论】:

  • 我已经在遍历一个列表,但我的问题不是如何遍历一个列表。问题是调用 this.menuStrip.Items.Find(row[i].ToString(), true) 对除两个之外的所有项目返回 null。
  • 我不知道你真正需要什么。反正我已经编辑过了。请检查。
  • 我的问题是 Items.Find 无法正常工作。它为某些值获取结果,而为其他值获取 null,即使它们在其中。
  • 你试过上面的代码了吗?请分享您的整个代码。
猜你喜欢
  • 2010-11-09
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多