C#如何在一个窗体调用另一个窗体的方法 急!

时间:2022-08-30 22:49:48
我有两个窗体,一个是添加数据的窗体,一个是显示数据的窗体(Datagridview加载数据),我在添加数据的窗体中添加一条数据后,退出添加数据的窗体     ,退出的方法中如何写,才能调用显示数据窗体中的刷新方法,将添加的数据显示出来?
不知道能不能看明白?

37 个解决方案

#1


退出添加数据的窗体时,将需要添加的数据插入到到数据库中,然后在显示数据的窗体中重新加载数据库即可实现.

#2


窗体间传递datatable,或者用委托等等,或者直接访问其他窗体控件(控件的modifers属性设置为public)

#3


1.在显示数据的窗体写个public方法用于刷新数据
2.在添加数据窗体里保存显示窗体的实例
3.在添加数据窗体close的时候调用显示的窗体实例的刷新方法

#4


该回复于2012-09-05 14:09:44被版主删除

#5


窗体也是类

#6


阿猫调阿狗,这都是对象哎,有啥区别,对象间通信。
互调方法。

#7


Modal窗体吗,如果是,调用返回时不时有个DialogResult.YES NO的玩意吗,
模态窗关闭后,对象并没有结束生命周期,通过它引用还可以调用你设置的信息,做操作就行了。

#8


是不是winform程序?
提下我的想法:
如果你有新建两个form1 和 form2
如果你的退出事件在form1中,
click_back(object sender,EventArgs e)
{
    //关掉当前的窗口
    this.form1.close();
    //开启新的窗口
     form2 fm= new form2();
     fm.ShowDialog();
}
这样你就打开了你所谓的有gridview的窗口了,那么你可以在你的构造函数中重新加载数据了
就是在form2中的函数

public form2()
{
     InitializeComponent();
     //下面开始刷新你的数据
     gridview.DataSource=xxxxxx;       
}

这样说的清楚了吧

#9


觉得添加事件比较合理,在添加数据的窗体发布一个事件,当你退出时,可以根据一定的条件来调用发布的事件,而在显示数据的窗体中,对添加数据的窗体这个对象的事件进行注册,这样可以降低不同窗体之间的藕合度,满足“自己的事情自己做”的原则!

#10


你的添加数据的窗体应该是从显示数据的窗体上点按钮或其他的调出来的吧

Form1是显示数据的。form2是添加数据的

Form2 f2=new Form2();

f2.ShowDialog();
在这之后调用刷新数据的方法就行了啊 

#11


添加数据的窗体中,弄一个Form类型的变量,保存显示数据窗体的实例(可以通过方法用参数传递过来);当添加数据的窗体关闭时,调用Form类型变量的相应方法就好了。注意访问权限。

#12


显示窗口中:

添加数据窗口 form=new 添加数据窗口;
if(form.ShowDialog()==DialogResult.Cancle)
    刷新数据;//重新绑定datagridview数据

#13


刷新方法,委托即可.

#14


this.Close();
frm2 fm=new frm2();
fm2.Show();

#15


可以创建一个静态类,两个窗体都可以调用,不久可以传值了?

#16


把你那个窗体中的方法设置成public就可以了

#17


Form1数据显示窗体; Form2新增数据窗体
1.如果新增数据窗体Form2是数据显示窗体Form1的弹出窗体:
form1中弹出form2的时候这么写
private void ShowForm2()
{
     Form2 form2 = new Form2();
     from2.show();
     Form1.刷新方法();
}
2.如果新增数据窗体Form2不是数据显示窗体Form1的弹出窗体:
首先form1中添加public类型的刷新方法
public void refrish(){}
form2中关闭方法内添加如下代码
Form1 form1 = new Form1();//创建窗体1实例
form1.refrish();//调用窗体1刷新方法
3.如果想要关闭窗体2的时候显示窗体1就更简单了
窗体2关闭时增加代码
Form1 form1 = new Form1();//创建窗体1实例
form1.show();

#18


引用 8 楼  的回复:
是不是winform程序?
提下我的想法:
如果你有新建两个form1 和 form2
如果你的退出事件在form1中,
click_back(object sender,EventArgs e)
{
    //关掉当前的窗口
    this.form1.close();
    //开启新的窗口
     form2 fm= new form2();
     fm.S……

这个东西不是很支持.....

#19


引用楼主  的回复:
我有两个窗体,一个是添加数据的窗体,一个是显示数据的窗体(Datagridview加载数据),我在添加数据的窗体中添加一条数据后,退出添加数据的窗体     ,退出的方法中如何写,才能调用显示数据窗体中的刷新方法,将添加的数据显示出来?
不知道能不能看明白?


需要这么麻烦吗?

刷新数据的方法应该还是在显示数据的窗体里使用啊
唯一要判断的,是添加数据的窗体到底添加成功了还是没成功,没成功不必刷新

可以用form.DialogResult来判断

#20


如果添加窗体是显示窗体show出来的,那在show出来这句的后面加刷新方法不就行了吗

#21


请问LZ解决了吗?怎么解决的?

#22


楼主你的问题其实是跨窗体操作,2个方法:
1:................我忘了!
2: 用构造函数做,在Form2里可以操作Form1里所有Public方法

#23


你就是关闭插入页面然后显示查询页面  显示最新数据是吧
单击退出隐藏插入那个窗体
然后显示查询窗体
查询的时候写在load事件不就好了吗

#24


this.Close();
frm2 fm=new frm2();
fm2.Show();  
窗体也是类,先new个对象,在执行对象的方法

#25


引用 1 楼  的回复:
退出添加数据的窗体时,将需要添加的数据插入到到数据库中,然后在显示数据的窗体中重新加载数据库即可实现.

退出时判断下是否成功修改了数据,如果成功就刷新,没有就不调用刷新方法。

#26


如果需要直接从窗体之间调函数,需要写成静态对象.

一般会在显示数据的窗体中建立 刷新的函数 和 一个打开按钮

在打开按钮的单击事件中 new 一个 添加数据的窗体用对话框的方式打开调用 ShowDialog() 方法

然后在 ShowDialog() 下面调用 刷新的函数 即可。

#28


委托是最好的、

#29


窗体1:
 public partial class Form1 : Form
    {
        public delegate void DelegateRefreshDGV();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
          
            DelegateRefreshDGV dgv=new DelegateRefreshDGV (refreshDGV);
            Form2 f2 = new Form2(dgv);实例化窗体2
            f2.Show();弹出窗体2
        }
        private void refreshDGV()// 刷新的方法
        {
          
        }
    }



窗体2 调用委托:
 public partial class Form2 : Form
    {
        private Form1.DelegateRefreshDGV dgv;
        public Form2(Form1.DelegateRefreshDGV _dgv)
        {
            InitializeComponent();
            this.dgv = _dgv;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dgv();调用委托方法
            this.Close();
        }
    }

#30


直接在new 的时候 给 form2 传过去就OK

#31


1. 你是需要第二个窗体类的方法,还是需要第二个窗体的功能?
如果只是需要那个类的一个方法,建议你将此方法封装成一个公用类,然后两个窗口可以一起调用。
如果是需要第二个窗体运作,但又不需要第二个窗体出现,可以创建第二个窗体然后 hiden(),
记得将方法写成pbulic 然后直接用实例调用即可。

#32


在form2里一个form1的关闭事件

然后刷新DATAGRIDVIEW就行了

#33


form2里写一个form1的关闭事件(form1_closed)

#34


public partial class Form1 : Form
    {
        TextBox txtBox;
        public Form1()
        {
            InitializeComponent();
            this.Text = "我是窗体1";
            txtBox = new TextBox();
            this.Controls.Add(txtBox);
            
            Form2 f2 = new Form2() { Text = "我是窗体2" };
            f2.ShowDialog(this);
            txtBox.Text = f2.txtBox.Text;
        }
    }

    public class Form2 : Form
    {
        public TextBox txtBox;
        public Form2()
        {
            txtBox = new TextBox();
            this.Controls.Add(txtBox);
        }       
    }

C#如何在一个窗体调用另一个窗体的方法 急!给分

#35


用委托吧,很简单。

#36


创建相应类对象对象 用对象调用你想要的方法,或者是跨页面传值吧

#37


被调用窗体暴露一个借口就行了。

#1


退出添加数据的窗体时,将需要添加的数据插入到到数据库中,然后在显示数据的窗体中重新加载数据库即可实现.

#2


窗体间传递datatable,或者用委托等等,或者直接访问其他窗体控件(控件的modifers属性设置为public)

#3


1.在显示数据的窗体写个public方法用于刷新数据
2.在添加数据窗体里保存显示窗体的实例
3.在添加数据窗体close的时候调用显示的窗体实例的刷新方法

#4


该回复于2012-09-05 14:09:44被版主删除

#5


窗体也是类

#6


阿猫调阿狗,这都是对象哎,有啥区别,对象间通信。
互调方法。

#7


Modal窗体吗,如果是,调用返回时不时有个DialogResult.YES NO的玩意吗,
模态窗关闭后,对象并没有结束生命周期,通过它引用还可以调用你设置的信息,做操作就行了。

#8


是不是winform程序?
提下我的想法:
如果你有新建两个form1 和 form2
如果你的退出事件在form1中,
click_back(object sender,EventArgs e)
{
    //关掉当前的窗口
    this.form1.close();
    //开启新的窗口
     form2 fm= new form2();
     fm.ShowDialog();
}
这样你就打开了你所谓的有gridview的窗口了,那么你可以在你的构造函数中重新加载数据了
就是在form2中的函数

public form2()
{
     InitializeComponent();
     //下面开始刷新你的数据
     gridview.DataSource=xxxxxx;       
}

这样说的清楚了吧

#9


觉得添加事件比较合理,在添加数据的窗体发布一个事件,当你退出时,可以根据一定的条件来调用发布的事件,而在显示数据的窗体中,对添加数据的窗体这个对象的事件进行注册,这样可以降低不同窗体之间的藕合度,满足“自己的事情自己做”的原则!

#10


你的添加数据的窗体应该是从显示数据的窗体上点按钮或其他的调出来的吧

Form1是显示数据的。form2是添加数据的

Form2 f2=new Form2();

f2.ShowDialog();
在这之后调用刷新数据的方法就行了啊 

#11


添加数据的窗体中,弄一个Form类型的变量,保存显示数据窗体的实例(可以通过方法用参数传递过来);当添加数据的窗体关闭时,调用Form类型变量的相应方法就好了。注意访问权限。

#12


显示窗口中:

添加数据窗口 form=new 添加数据窗口;
if(form.ShowDialog()==DialogResult.Cancle)
    刷新数据;//重新绑定datagridview数据

#13


刷新方法,委托即可.

#14


this.Close();
frm2 fm=new frm2();
fm2.Show();

#15


可以创建一个静态类,两个窗体都可以调用,不久可以传值了?

#16


把你那个窗体中的方法设置成public就可以了

#17


Form1数据显示窗体; Form2新增数据窗体
1.如果新增数据窗体Form2是数据显示窗体Form1的弹出窗体:
form1中弹出form2的时候这么写
private void ShowForm2()
{
     Form2 form2 = new Form2();
     from2.show();
     Form1.刷新方法();
}
2.如果新增数据窗体Form2不是数据显示窗体Form1的弹出窗体:
首先form1中添加public类型的刷新方法
public void refrish(){}
form2中关闭方法内添加如下代码
Form1 form1 = new Form1();//创建窗体1实例
form1.refrish();//调用窗体1刷新方法
3.如果想要关闭窗体2的时候显示窗体1就更简单了
窗体2关闭时增加代码
Form1 form1 = new Form1();//创建窗体1实例
form1.show();

#18


引用 8 楼  的回复:
是不是winform程序?
提下我的想法:
如果你有新建两个form1 和 form2
如果你的退出事件在form1中,
click_back(object sender,EventArgs e)
{
    //关掉当前的窗口
    this.form1.close();
    //开启新的窗口
     form2 fm= new form2();
     fm.S……

这个东西不是很支持.....

#19


引用楼主  的回复:
我有两个窗体,一个是添加数据的窗体,一个是显示数据的窗体(Datagridview加载数据),我在添加数据的窗体中添加一条数据后,退出添加数据的窗体     ,退出的方法中如何写,才能调用显示数据窗体中的刷新方法,将添加的数据显示出来?
不知道能不能看明白?


需要这么麻烦吗?

刷新数据的方法应该还是在显示数据的窗体里使用啊
唯一要判断的,是添加数据的窗体到底添加成功了还是没成功,没成功不必刷新

可以用form.DialogResult来判断

#20


如果添加窗体是显示窗体show出来的,那在show出来这句的后面加刷新方法不就行了吗

#21


请问LZ解决了吗?怎么解决的?

#22


楼主你的问题其实是跨窗体操作,2个方法:
1:................我忘了!
2: 用构造函数做,在Form2里可以操作Form1里所有Public方法

#23


你就是关闭插入页面然后显示查询页面  显示最新数据是吧
单击退出隐藏插入那个窗体
然后显示查询窗体
查询的时候写在load事件不就好了吗

#24


this.Close();
frm2 fm=new frm2();
fm2.Show();  
窗体也是类,先new个对象,在执行对象的方法

#25


引用 1 楼  的回复:
退出添加数据的窗体时,将需要添加的数据插入到到数据库中,然后在显示数据的窗体中重新加载数据库即可实现.

退出时判断下是否成功修改了数据,如果成功就刷新,没有就不调用刷新方法。

#26


如果需要直接从窗体之间调函数,需要写成静态对象.

一般会在显示数据的窗体中建立 刷新的函数 和 一个打开按钮

在打开按钮的单击事件中 new 一个 添加数据的窗体用对话框的方式打开调用 ShowDialog() 方法

然后在 ShowDialog() 下面调用 刷新的函数 即可。

#27


#28


委托是最好的、

#29


窗体1:
 public partial class Form1 : Form
    {
        public delegate void DelegateRefreshDGV();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
          
            DelegateRefreshDGV dgv=new DelegateRefreshDGV (refreshDGV);
            Form2 f2 = new Form2(dgv);实例化窗体2
            f2.Show();弹出窗体2
        }
        private void refreshDGV()// 刷新的方法
        {
          
        }
    }



窗体2 调用委托:
 public partial class Form2 : Form
    {
        private Form1.DelegateRefreshDGV dgv;
        public Form2(Form1.DelegateRefreshDGV _dgv)
        {
            InitializeComponent();
            this.dgv = _dgv;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dgv();调用委托方法
            this.Close();
        }
    }

#30


直接在new 的时候 给 form2 传过去就OK

#31


1. 你是需要第二个窗体类的方法,还是需要第二个窗体的功能?
如果只是需要那个类的一个方法,建议你将此方法封装成一个公用类,然后两个窗口可以一起调用。
如果是需要第二个窗体运作,但又不需要第二个窗体出现,可以创建第二个窗体然后 hiden(),
记得将方法写成pbulic 然后直接用实例调用即可。

#32


在form2里一个form1的关闭事件

然后刷新DATAGRIDVIEW就行了

#33


form2里写一个form1的关闭事件(form1_closed)

#34


public partial class Form1 : Form
    {
        TextBox txtBox;
        public Form1()
        {
            InitializeComponent();
            this.Text = "我是窗体1";
            txtBox = new TextBox();
            this.Controls.Add(txtBox);
            
            Form2 f2 = new Form2() { Text = "我是窗体2" };
            f2.ShowDialog(this);
            txtBox.Text = f2.txtBox.Text;
        }
    }

    public class Form2 : Form
    {
        public TextBox txtBox;
        public Form2()
        {
            txtBox = new TextBox();
            this.Controls.Add(txtBox);
        }       
    }

C#如何在一个窗体调用另一个窗体的方法 急!给分

#35


用委托吧,很简单。

#36


创建相应类对象对象 用对象调用你想要的方法,或者是跨页面传值吧

#37


被调用窗体暴露一个借口就行了。