1,主窗体往子窗体传值: 第一种是,在子窗体提供重载构造函数,利用重载构造函数传递值,适用于传值数量比较少; 第二种是,在子窗体中定义一个主窗体对象,然后就可以接收到主窗体的属性值了,适用于传值数量大。 2、从子窗体返回值到主窗体中 利用了子窗体的属性保存子窗体的值,在主窗体中可以访问到子窗体的属性 由于没什么时间,回答简陋了点,希望你可以理解,其实很多问题csdn上都可以找到答案,建议你多上csdn。 推荐文章:
在form的通用部分使用Public来声明变量
在另一个窗体中使用前一个窗体的这个使用Public来声明的变量的使用格式如下:
窗体名.变量名
e.g:
在Form1中的声明部分声明a变量如下:
Public a
在Form2中调用这个变量并把它的值传递到变量b上,代码如下:
b=Form1.a
当然也可以把变量用Public声明在公共模块上,这样可以避免输入窗体名,即直接输入该变量名即可调用该变量的值。
C#不熟悉,但是在VC++中对于一些少量基本数据(DWORD,int,bool等)可以使用Windows的消息机制,可以由一个窗口把数据当参数投送到另一个窗口,甚至窗口可以是不同进程创建的。所以这种机制也使得无论你的程序用什么语言开发都可以使用,只要是带窗口的。
如果是大量数据并且窗口在同一个进程可以在消息中传递数据地址(如指针、引用等)。
不知道C#支不支持全局变量,否则就更容易传递数据了。
发送消息使用的API是SendMessage或PostMessage你可以搜索下这两个函数的用法,网上很多资料。也不知道C#把这两个函数放在哪个名字空间里
但是这两个函数有个最关键的参数,就是接受消息的窗口的句柄,否则它们怎么知道发到哪里?不过好在窗口句柄在窗口创建后就是不变的。
另有一个参数就是消息号,消息号小于WM_USER(16进制值为0x400)的消息是系统使用的,所以最好不要去使用,用大于0x400,如两个窗口约定使用0x408,0x500等.
还有两个参数可以随便设置了,当然你得用它们来传递你的数据
当发送消息后,接受消息的窗口的消息循环中就可以自由处理了。
用的是什么编译工具?反正不是VC6.0~
不知道你是不是在form2关闭以后,才在form1中获得form2中输入的信息?
那就提供一些思路吧。
在form2中输入的信息,在form2中可以获得的吧?然后在form2中写两个函数,类似:
string form2::getText1()
{
return text1;
}
然后在你的button1_Click里面,form2->getText1();
不知道能不能实现呢~
方法1:
直接将form1 的this 指针传入form2
即 fm1 = gcnew Form2(this);
修改Form的构造函数 Form2(Form1 *this2);
方法2:可以把nameA跟nameB变成全局变量,即放在Form1类外。
首先#include"Form2.h"
......
static String nameA;
static String nameB;
......
public ref class Form1 : public System::Windows::Forms::Form
在Form2里,也在类外
extern static String nameA;
extern static String nameB;
这样子在Form2中直接就可以赋值。
想简单的传个变量,直接定义成与theApp一样的全局变量。然后就随便你用了。
如果想用指针方式引用,那必须保证窗口类的生存周期。