private SortedList<ToolStripMenuItem, Form> forms = new SortedList<ToolStripMenuItem, Form>();

private void MainForm_Load(object sender, EventArgs e)
{
   formsAdd(menuCommandPrompt, new CommandPrompt());
   formsAdd(menuLogScreen, new LogScreen()); //Error
}

private void formsAdd(ToolStripMenuItem item, Form form)
{
   forms.Add(item, form); //Failed to compare two elements in the array.
   form.Tag = this;
   form.Owner = this;
}

我搞不懂它为什么会出错。在窗体加载事件的第二行发生错误。
formsadd方法只需将form和toolstip元素添加到数组(forms)中,并为此设置form的标记和所有者。在第二次调用函数时,它抛出一个错误。
CommandPrompt, LogScreen /* are */ Form //s
menuCommandPrompt, menuLogScreen /* are */ ToolStripMenuItem //s

最佳答案

您有一个SortedList,但是ToolStripMenuItem没有实现IComparable,因此列表不知道如何对它们进行排序。
如果不需要对项目进行排序,则可以使用Tuples或Dictionary的列表,具体取决于要执行的操作。
如果要对它们进行排序,则需要使用the overload of SortedLists's constructor that takes IComparer。这意味着您必须以某种方式实现该接口。

09-19 23:54