从另一个表单编辑时 MenuStrip 不更新 (C#)
MenuStrip not updating when editing it from another form (C#)
在过去的 3-4 小时里,我遇到了一个一直困扰着我的问题。
基本上,我有一个主窗体,即 MDI 父窗体。我有另一种形式,即该父项的 MDI 子项。我使用第二种形式登录,登录后,我想向该主窗体的 menuStrip 添加新项目,但由于某种原因我不能。我尝试调试,发现 menuStrip 的索引针对新项目正确扩展,但它们没有在表单中更新。我尝试使用 this.Show
再次显示主窗体。这奏效了!我得到了一个新表单,显示了 menuStrip 中的新项目。但是,我只想更新它们而不是创建另一个表单。我尝试了 refreshing/updating,但没有任何效果。 :/ 有什么建议么?
谢谢!
编辑:
这里有更多信息:
这是第二种形式的代码
if (successLogin==DialogResult.OK || successLogin==DialogResult.Cancel)
{
Form1 main = new Form1(); //define main form
FullUser = textBox1.Text; //getting the username (will use it for the menuStrip items "Logged in as: "+ FullUser)
main.LogedIn(FullUser);//calls method
this.Close(); //closing the 2nd form
}
在主窗体中调用 public 方法
public void LogedIn(string user)
{
menuStrip1.Items.Add("Item here"); //adding the item to the menuStrip
}
编辑 2:我放置了一个计时器,它在打开第二个表单时启动并检查 public 布尔值。这让它工作了,但仍然不是我想要的方式。
您正在创建一个类型为 Form1
的新表单:
Form1 main = new Form1();
并将项目添加到 那个 新表格,而不是您现有的表格。
如果表格是您在问题中陈述的第二种表格的 MDIParent
,您可以将该行更改为:
Form1 main = (Form1)this.MDIParent;
如果不是,则您需要保留对现有表单的引用。如果您创建一个新的(就像您正在做的那样),那么这些项目将添加到那个新的,但不会添加到已经创建的那个。
在过去的 3-4 小时里,我遇到了一个一直困扰着我的问题。
基本上,我有一个主窗体,即 MDI 父窗体。我有另一种形式,即该父项的 MDI 子项。我使用第二种形式登录,登录后,我想向该主窗体的 menuStrip 添加新项目,但由于某种原因我不能。我尝试调试,发现 menuStrip 的索引针对新项目正确扩展,但它们没有在表单中更新。我尝试使用 this.Show
再次显示主窗体。这奏效了!我得到了一个新表单,显示了 menuStrip 中的新项目。但是,我只想更新它们而不是创建另一个表单。我尝试了 refreshing/updating,但没有任何效果。 :/ 有什么建议么?
谢谢!
编辑: 这里有更多信息:
这是第二种形式的代码
if (successLogin==DialogResult.OK || successLogin==DialogResult.Cancel)
{
Form1 main = new Form1(); //define main form
FullUser = textBox1.Text; //getting the username (will use it for the menuStrip items "Logged in as: "+ FullUser)
main.LogedIn(FullUser);//calls method
this.Close(); //closing the 2nd form
}
在主窗体中调用 public 方法
public void LogedIn(string user)
{
menuStrip1.Items.Add("Item here"); //adding the item to the menuStrip
}
编辑 2:我放置了一个计时器,它在打开第二个表单时启动并检查 public 布尔值。这让它工作了,但仍然不是我想要的方式。
您正在创建一个类型为 Form1
的新表单:
Form1 main = new Form1();
并将项目添加到 那个 新表格,而不是您现有的表格。
如果表格是您在问题中陈述的第二种表格的 MDIParent
,您可以将该行更改为:
Form1 main = (Form1)this.MDIParent;
如果不是,则您需要保留对现有表单的引用。如果您创建一个新的(就像您正在做的那样),那么这些项目将添加到那个新的,但不会添加到已经创建的那个。