C# winform 多form传递数据问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform 多form传递数据问题相关的知识,希望对你有一定的参考价值。

现在有form1,form2,form3,三个窗体。
form1构造函数为 :
public denglu()

InitializeComponent();

form2构造函数为 :
form1 form1=new form1();
public geren(form1 form)

form1 = form;
InitializeComponent();
(为了能让form2将数据返回form1)

现在希望构造form3,form3数据继承form2并能够将数据返回form2

这样构造为什么不行
Form1 form1=new form2();
Form2 form2=new Form2(form1);
public daikuan(Form2 form)

form2=form;
InitializeComponent();


第二行会报错:
字段初始值设定项无法引用非静态字段、方法或属性“yinhan.Form3.form1”
这是怎么回事?需要如何修改?
那个是笔误
Form1 form1=new Form1();
Form2 form2=new Form2(form1);
public daikuan(Form2 form)

form2=form;
InitializeComponent();

这样也不行

人心无求品自高能不能详细说明下。初学不是很懂,谢谢

没有这样做程序的,你被自己的思想带进误区了.正确的做法是:
把窗口定义成静态,然后直接用静态对象引用,你这个还带着C++的习惯,现在的语法根本就是错的。

首先,继承指的是类的继承,根本不可能传递参数,要传递参数必须是实例才可以;
其次,拟定义一个静态的from1变量,然后就可以直引用了,如下:
public form1 f = new form1();
f.属性=...就没问题了。
参考技术A 这样传值 好像不太好吧
Form1 form1=new form2();
类型都不一样 怎么赋值呢
参考技术B 窗体:Form1.cs-->
public Form1()

InitializeComponent();

窗体:Form2.cs-->
Form1 form1 = null;
public Form2(Form1 form1)

this.form1 = form1;
InitializeComponent();

窗体:Form3.cs-->
Form1 form1 = null;
Form2 form2 = null;
public Form3(Form2 form2)

this.form1 = form2.form1;
this.form2 = form2;
InitializeComponent();

如果,LZ想三个窗体间数据传递,以上是我建议的代码。LZ中的代码中:Form2.cs-->中Form1 form1 = new Form1();这个代码会在内存中开辟空间,着实没有必要,理由:form1值实际应该由构造函数提供。同理,Form3.cs-->中Form1 form1 = new Form1();这样new可以说是错的,理由:此时new的Form1对象已经是完全崭新的一个,和第一次运行的对象是完全不同的两个,就意味失去Form1中的数据,同时传递到一个不相关的Form1窗体对象中。
以上,是本人的意见,,希望可以帮到LZ!
参考技术C 数据多的话建议用观察者模式. 参考技术D khjkhjmhnvmhmhvmvjhmvn

C# winform form窗体与class类的问题

Form1,Class1,Form1中有个button1,按钮初始化Enabled=false
通过Form1的load()方法,加载Class1中的方法,Class1中的方法是将Form1的按钮Enabled=true;
code 如下:
//Form1
public partial class Form1 : Form

Class1 c;
public Form1()

InitializeComponent();

private void Form1_Load(object sender, EventArgs e)

c = new Class1();
c.aa();


//Class1
public class Class1

Form1 f1;
public void aa()

f1 = new Form1();
f1.button1.Enabled = true;


以上代码无法实现Form1的按钮为可用,运行后那按钮仍然是灰的。
求解!!

额 我知道了 这个问题你思路是对了 但是写错了 你看, 你现在Form1(1)里面实例化了Class1的对象 然后又在Class1里面重新实例化Form1(2)的对象 但是你要知道这个时候Form1(1)和Form1(2)是两个对象 他们是不想相等的 就好比我和你 虽然都是人 但我们不相等。 你本来有一个Form1了 但是当你调用Class1 的时候又重新“建造”了一个Form1 他们两个不是同一个东西!!!
解决方法 : 重写Class1的构造方法 给它一个参数 参数是一个Button按钮
然后在Form1实例化Class1的时候 把那个button放在里面就好了
参考技术A 把form1作为参数传给class1,而不是重新定义一个,如下代码

public partial class Form1 : Form

Class1 c;
public Form1()

InitializeComponent();

private void Form1_Load(object sender, EventArgs e)

c = new Class1(this);
c.aa();


//Class1
public class Class1

public Class1(Form1 f)

f1=f;

Form1 f1;
public void aa()

f1.button1.Enabled = true;

参考技术B 你又定义了一个form1的实例...
改成
public class Class1
public void aa(Button btn)

btn.Enabled = true;


调用的时候直接把button当参数传进去
c = new Class1();
c.aa(button1);本回答被提问者和网友采纳
参考技术C 类中的f1 是你自己定义的 不是窗体 form1 啊 ,这个问题你只要在窗体中定义一个方法就行了。不要搞得那么复杂! 参考技术D 因为你的类中的Form1跟你窗体的form1不是同一个对象,你在下面的类中用f1.Show();就知道了

以上是关于C# winform 多form传递数据问题的主要内容,如果未能解决你的问题,请参考以下文章

Winforms C#在表单之间传递变量[重复]

C# winform form窗体与class类的问题

C#关于winform线程更新form的文本框输出的问题

C#(Winfrom)窗体传值问题(子窗体回传值给父窗体)

在C#中怎样在两个Form之间传递数据(Winfrom)?

c# 中form与form之间的数据传递