C# 从另一个窗体调用一个窗体的事件/方法而不重新打开窗体

C# 从另一个窗体调用一个窗体的事件/方法而不重新打开窗体,c#,forms,events,C#,Forms,Events,“Form1”和“form2”在mdi中打开。当我按下“form1”中的按钮时,它应该调用evevt或“form2”的方法,例如选中“复选框”,刷新网格 为此,我有form2child表单的代码: public partial class Form2: Form { private Form1 Form1_Obj1; public Form2(Form1 Form1_Obj2) { InitializeComponent(); Form1_

“Form1”和“form2”在mdi中打开。当我按下“form1”中的按钮时,它应该调用evevt或“form2”的方法,例如选中“复选框”,刷新网格 为此,我有form2child表单的代码:

public partial class Form2: Form
{
    private Form1 Form1_Obj1;
    public Form2(Form1 Form1_Obj2)
    {
        InitializeComponent();
        Form1_Obj1 = Form1_Obj2;
    }
    public Form2()
    {
        InitializeComponent();

    }
对于从form1调用事件,我有代码

Form2 obj=new Form2(this);
obj1.chkSortPlace.Checked = true;
              or         
obj1.chkSortPlace_CheckedChanged(null, null);

问题是事件是调用的,但事件中的代码(即将数据源分配给gridview)没有发生。它不会给出错误,但结果是不显示网格不刷新

    foreach (Form frm in Application.OpenForms)  
            {  
                if (frm is Form2)
                 {
                     //Put your code here.
                 } 
            }  

编辑:更改了答案,因为我误解了OP的意图

无法操作chkSortPlace的原因是,默认情况下,添加到表单中的所有控件都标记为private

转到Form1,右键单击它,选择查看代码并添加以下内容:

public bool SortPlaceChecked 
{
    get { return chkSortPlace.Checked; }
    set { chkSortPlace.Checked = value; }
}

然后,当您想从其他表单更改chkSortPlace的状态时,只需使用上面添加的公共属性即可。

您真正想做什么?你所做的是运行良好,但我不理解在窗体重新打开时重新打开窗体。如果你不想打开窗体,可以在窗体2的窗体加载事件中调用隐藏方法。窗体1和窗体2在mdi中打开。当我按下表格1中的按钮时,它应该调用evevt或表格2的方法,例如,选中复选框,刷新网格。我已经为你的帖子提供了一个开始答案,让你知道更多关于你的问题!您提到它们是MDI表单,所以我认为您应该看看Form1.MDI Children。它们也不是MDI表单。它们都是MDI中的子表单在您的代码中-->如果frm是Form2{此处frm.Event不允许,请告诉如何调用Event}我认为如果你只调用函数就足够了,但是再次检查事件的公共和私有属性,不管这种解决方案有多不安全,我只是提供了这个,让你知道还有一些其他方法可以调用不同的表单,但这不是你的确切解决方案。当然,您应该更多地搜索网络以了解此问题。问题是事件是调用,但事件中的代码(即将数据源分配给gridview)没有出现。它不会给出错误,但结果不是显示网格不刷新。请释放代码。我可以阅读你的代码来理解你的问题请看我的问题我写的代码。如果你可以更改复选框值是选中的,即chkSortPlace.Checked=true;然后我的问题也解决了。这里的复选框修饰符是Public,问题是调用了事件,但事件中的代码(即将数据源分配给gridview)没有出现。它不会给出错误,但结果不是display@Ranjeet哦,好的。我误解了。您希望实际更改是否选中chkSortPlace。好的,在这种情况下,您只需要在Form1类中添加一个公共方法或属性即可,因为chkSortPlace默认标记为private。我已使用更好的解决方案更新了我的原始答案。请查看我编写的问题代码。如果您帮助我将复选框值更改为选中,即chkSortPlace.Checked=true;然后我的问题也解决了。这里的复选框修饰符是公共的*请查看我的问题我编写的代码。如果你帮助我将复选框值更改为选中,即chkSortPlace.Checked=true;然后我的问题也解决了。这里复选框修饰符是公共的