C# c从form2激活form1上的面板
因此,我正在开发一个订购系统,当从form2下订单时,会在form1上显示一个带有消息的面板。。但它似乎不起作用,请帮忙C# c从form2激活form1上的面板,c#,winforms,visual-studio,C#,Winforms,Visual Studio,因此,我正在开发一个订购系统,当从form2下订单时,会在form1上显示一个带有消息的面板。。但它似乎不起作用,请帮忙 int chkComm1 = comm1.ExecuteNonQuery(); if(chkComm1 == 1) { //so basically if query call is successful (which it is) it should open
int chkComm1 = comm1.ExecuteNonQuery();
if(chkComm1 == 1)
{
//so basically if query call is successful (which it is) it should open a panel with message on my main program or form1, but It doesnt work? anyone help?
Main_Program mp = new Main_Program();
mp.orderALERT.Enabled = true;
mp.orderALERT.Visible = true;
mp.Refresh();
}
在此代码之后,它应该显示面板,但什么也没有发生,如果有人可以帮助我,请做!谢谢 问题:您的代码无法工作,因为您创建了form1的新实例,该实例与应用程序中已有的主窗体不相关:
Main_Program mp = new Main_Program(); // here
解决方案:您应该使用已经打开的form1。这在事件中很容易做到。在form2上创建一个事件:
public event EventHandler OrderPlaced;
并在下订单时提出:
int chkComm1 = comm1.ExecuteNonQuery();
if(chkComm1 == 1)
{
OrderPlaced?.Invoke(this, EventArgs.Empty);
}
在form1上订阅form2的活动:
form2.OrderPlaced += Form2_OrderPlaced;
在事件处理程序激活面板中:
private void Form2_OrderPlaced(object sender, EventArgs e)
{
orderALERT.Enabled = true;
orderALERT.Visible = true;
}
将Main_程序的实例传递给Form2的Show方法,如下所示:
public partial class Main_Program : Form
{
public Main_Program()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show(this); // pass in THIS instance of Main_Program as the "Owner"
}
}
现在,在表单2中,您可以将所有者转换回Main_程序并进行操作。但是,要访问orderALERT面板,必须将其Modifiers属性更改为public:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (this.Owner != null && this.Owner is Main_Program)
{
Main_Program mp = (Main_Program)this.Owner;
mp.orderALERT.Enabled = true;
mp.orderALERT.Visible = true;
mp.orderALERT.Refresh();
}
}
}
Main_程序是表单吗?你没有出示那张表格。除非刷新应该这样做?是的,这是一个windows窗体,也就是我的主程序,它看起来是这样的:当我单击“从第二个窗体付款”后,它将以绿色显示我使用的消息,以通知有新订单可用。消息在默认情况下隐藏,直到有活动订单。刷新应该在主程序出现后刷新,但不会发生任何事情..好的,但您从未在窗体实例上调用.Show。如果一开始从未显示表单,则无法在表单上显示该表单。我想你在什么地方已经有过这种形式的例子了?在这种情况下,你不应该做一个新的。当我写这篇文章的时候,一个不断改进的答案就写在下面,你一定要去那里。它已经在后台打开了。它就像启动程序时的启动窗体。第二个窗体在不关闭主程序窗体的情况下打开。但是当我执行我发布的程序时,我的主程序表单不会更新。要么是错误的代码,要么是我做错了什么我得到这个消息是出于某种原因:O@Rin请确保薪酬是form2@Rin当我尝试访问PAY.OrderPlaced时,它会将我作为类名来查找。它甚至不会显示,因为我没有访问权限@Rin您是否在上述表格2中定义了事件?公共事件事件处理程序;它在我的模型示例中非常有效,所以你做错了什么。确保没有任何新的关键字生成Main_程序的实例。还要确保没有任何Try/Catch块通过不处理异常来隐藏异常。嗯,奇怪,还有其他方法吗?编辑:我又试了一次,它对我不起作用::然后你的设置有些地方不是很正确,或者你没有解释得足够详细。我设法和你上面发布的其他人一起做了,但我还是会想办法弄明白为什么这一条不适合我的教育目的:谢谢你帮助兄弟