【求教】如何在一个窗体中调用主窗体中的函数

时间:2022-08-30 21:18:42
我主窗体没有实例名  在MAIN函数中这样运行的
Application.Run(new Form1 (frm.getLoginUser()));

然后我在主窗体中点击一个button弹出另一个窗体,想调用主窗体中的一个button的click事件,但是主窗体虽然new了但是不知道实例名,请问有办法可以调用么?

16 个解决方案

#1


比如另一个窗体是:Form2


Form2 f=new Form2();
f.Show();

#2


你要知道Main是整个程序的入口点,而实际的操作应该是在主窗体中

而且在主窗体可以得到依附在其上的所有控件及相应的事件,应该好好的理下流程

#3


我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼  的回复:
比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

#4


引用 2 楼  的回复:
你要知道Main是整个程序的入口点,而实际的操作应该是在主窗体中

而且在主窗体可以得到依附在其上的所有控件及相应的事件,应该好好的理下流程


main是程序入口点我知道,但实际的操作也可以在主窗体弹出来的另一个窗体中吧?

#5


你可以将将主窗体点击事件触发的代码抽象成一个公共类的方法,通过传递参数来公共调用

#6


引用 5 楼  的回复:
你可以将将主窗体点击事件触发的代码抽象成一个公共类的方法,通过传递参数来公共调用

看来只能这样了    不行我就把子窗体的控件搬到主窗体上,不过要改很多visible

#7


如果你以后再写一个程序,然后发现原来写的程序的一个对话框看起来差不多,可以拿来重用。

于是你把这个对话框的代码拷贝过来了。但是很郁闷地发现,根本不能用,为什么呢?因为这个对话框还需要“调用主窗口的一个函数”,于是你就把“主窗口”拷贝来了,发现主窗口还使用另一个子窗口……

算了,我还是重写吧。

每天都在重复劳动,而不知道多学习一点,这真的是很大的悲哀。你看到这里天天有人说自己为什么写了几年程序都没有长进。

给你一个思考题,能不能把主窗体和子窗体双向的调用关系变成单向?

#8


当然了,应付眼前的差事似乎比学习、思考什么的更重要。用制造问题的办法解决问题,再去解决因为解决问题而制造的问题,这听上去很滑稽的事情就是你觉得最当务之急的。那么你不但在重复劳动,还在无效劳动,甚至是破坏劳动。

#9


有些人一辈子都搞不清楚自己到底在做什么.真是悲哀.

#10


引用 3 楼  的回复:
我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼  的回复:

比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

在Form1中new Form2:Form2 f2=new Form(this);

在Form2中做一个构造函数public Form2(Form1)

private Form1 f1;
public Form2(Form1 f)
{
   f1=f;
}

然后这个f1能不能调用Form1中的事件~我也不知道 你可以试下。。。

#11


引用 10 楼  的回复:
引用 3 楼  的回复:

我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼  的回复:

比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

在Form1中new Form2:Form2 f2=new Form(this);

在Form2……

可以的 刚刚测试了下下 就是要把Form1中的事件做成Public的

#12


应该可以用委托吧,你的意思我不怎么懂,委托可以发送你想发送的对象

#13


做个事件去调用主窗体的BUTTON事件就可以了

#14


引用 7 楼  的回复:
如果你以后再写一个程序,然后发现原来写的程序的一个对话框看起来差不多,可以拿来重用。

于是你把这个对话框的代码拷贝过来了。但是很郁闷地发现,根本不能用,为什么呢?因为这个对话框还需要“调用主窗口的一个函数”,于是你就把“主窗口”拷贝来了,发现主窗口还使用另一个子窗口……

算了,我还是重写吧。

每天都在重复劳动,而不知道多学习一点,这真的是很大的悲哀。你看到这里天天有人说自己为什么……

膜拜大牛。
我是个初学者,不知道自己有没有理解你的意思,我想的也是怎么样能够复用更多的代码。因为接的是师兄的程序,自己经验也不足,所以虽然感觉之前封装的不好,但是自己也没有头绪。
把调用关系做成单向的:是不是可以再子窗口的构造函数的参数中加入主窗体

#15


引用 11 楼  的回复:
引用 10 楼 的回复:

引用 3 楼 的回复:

我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼 的回复:

比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

在Form1中new Form2:Form2 f2=new Form(thi……


嗯  除了把form1中的private改为public之外  还可以添加属性  这样更好一些  没用改变原来的封装  

#16


引用 12 楼  的回复:
应该可以用委托吧,你的意思我不怎么懂,委托可以发送你想发送的对象

应该可以把   新手对委托没理解透彻

#1


比如另一个窗体是:Form2


Form2 f=new Form2();
f.Show();

#2


你要知道Main是整个程序的入口点,而实际的操作应该是在主窗体中

而且在主窗体可以得到依附在其上的所有控件及相应的事件,应该好好的理下流程

#3


我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼  的回复:
比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

#4


引用 2 楼  的回复:
你要知道Main是整个程序的入口点,而实际的操作应该是在主窗体中

而且在主窗体可以得到依附在其上的所有控件及相应的事件,应该好好的理下流程


main是程序入口点我知道,但实际的操作也可以在主窗体弹出来的另一个窗体中吧?

#5


你可以将将主窗体点击事件触发的代码抽象成一个公共类的方法,通过传递参数来公共调用

#6


引用 5 楼  的回复:
你可以将将主窗体点击事件触发的代码抽象成一个公共类的方法,通过传递参数来公共调用

看来只能这样了    不行我就把子窗体的控件搬到主窗体上,不过要改很多visible

#7


如果你以后再写一个程序,然后发现原来写的程序的一个对话框看起来差不多,可以拿来重用。

于是你把这个对话框的代码拷贝过来了。但是很郁闷地发现,根本不能用,为什么呢?因为这个对话框还需要“调用主窗口的一个函数”,于是你就把“主窗口”拷贝来了,发现主窗口还使用另一个子窗口……

算了,我还是重写吧。

每天都在重复劳动,而不知道多学习一点,这真的是很大的悲哀。你看到这里天天有人说自己为什么写了几年程序都没有长进。

给你一个思考题,能不能把主窗体和子窗体双向的调用关系变成单向?

#8


当然了,应付眼前的差事似乎比学习、思考什么的更重要。用制造问题的办法解决问题,再去解决因为解决问题而制造的问题,这听上去很滑稽的事情就是你觉得最当务之急的。那么你不但在重复劳动,还在无效劳动,甚至是破坏劳动。

#9


有些人一辈子都搞不清楚自己到底在做什么.真是悲哀.

#10


引用 3 楼  的回复:
我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼  的回复:

比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

在Form1中new Form2:Form2 f2=new Form(this);

在Form2中做一个构造函数public Form2(Form1)

private Form1 f1;
public Form2(Form1 f)
{
   f1=f;
}

然后这个f1能不能调用Form1中的事件~我也不知道 你可以试下。。。

#11


引用 10 楼  的回复:
引用 3 楼  的回复:

我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼  的回复:

比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

在Form1中new Form2:Form2 f2=new Form(this);

在Form2……

可以的 刚刚测试了下下 就是要把Form1中的事件做成Public的

#12


应该可以用委托吧,你的意思我不怎么懂,委托可以发送你想发送的对象

#13


做个事件去调用主窗体的BUTTON事件就可以了

#14


引用 7 楼  的回复:
如果你以后再写一个程序,然后发现原来写的程序的一个对话框看起来差不多,可以拿来重用。

于是你把这个对话框的代码拷贝过来了。但是很郁闷地发现,根本不能用,为什么呢?因为这个对话框还需要“调用主窗口的一个函数”,于是你就把“主窗口”拷贝来了,发现主窗口还使用另一个子窗口……

算了,我还是重写吧。

每天都在重复劳动,而不知道多学习一点,这真的是很大的悲哀。你看到这里天天有人说自己为什么……

膜拜大牛。
我是个初学者,不知道自己有没有理解你的意思,我想的也是怎么样能够复用更多的代码。因为接的是师兄的程序,自己经验也不足,所以虽然感觉之前封装的不好,但是自己也没有头绪。
把调用关系做成单向的:是不是可以再子窗口的构造函数的参数中加入主窗体

#15


引用 11 楼  的回复:
引用 10 楼 的回复:

引用 3 楼 的回复:

我不是要显示form2,是form已经showdialog了,然后再form2中怎么调用form1?
引用 1 楼 的回复:

比如另一个窗体是:Form2

C# code

Form2 f=new Form2();
f.Show();

在Form1中new Form2:Form2 f2=new Form(thi……


嗯  除了把form1中的private改为public之外  还可以添加属性  这样更好一些  没用改变原来的封装  

#16


引用 12 楼  的回复:
应该可以用委托吧,你的意思我不怎么懂,委托可以发送你想发送的对象

应该可以把   新手对委托没理解透彻