VC++Windows窗体应用程序 窗体间如何传递变量

跪求详细可行解决方案首先我创建了windows窗体应用程序的工程然后自动就生成了主窗口,Form1然后我又添加了一个窗口Form2在Form1.h中首先#include"... 跪求详细可行解决方案

首先我创建了windows窗体应用程序的工程
然后自动就生成了主窗口,Form1
然后我又添加了一个窗口Form2
在Form1.h中
首先#include"Form2.h"
......
然后
public ref class Form1 : public System::Windows::Forms::Form
{
public:
static String^ nameA;
static String^ nameB; //这是那两个需要传递的变量
Form^ fm1; //定义一个fm1
......
}
然后
public:
Form1(void)
{
InitializeComponent();
//
//TODO: 在此处添加构造函数代码
fm1 = gcnew Form2(); //在构造函数初
//始化定义了fm1
}
然后
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
fm2->ShowDialog(); //到这里,点击button1顺利召唤出了Form2
}

好了,然后问题就出现了
在Form2.h中,声明了一个textBox1
怎么在Form2中对Form1.h里的nameA和nameB赋值呢?!
怎样能将Form2的获取的信息传递到Form1中呢?
如果直接写
Form1::nameA=this->textBox1->Text;
error C2653: “Form1”: 不是类或命名空间名称
error C2065: “nameA”: 未声明的标识符

但如果在Form2.h的开头
也定义
#include"Form1.h"
的话
则又报错
error C2065: “nameA”: 未声明的标识符

那我究竟该怎么实现两个窗体之间的信息传递呢??!
跪求高手解答不胜感激!!!
TO:chenliefen

public:
Form1(void)
{
InitializeComponent();
//
//TODO: 在此处添加构造函数代码
fm1 = gcnew Form2(this);
}

这样就报错了.说 error C3673: “KeyBoardgame::Form2”: 类没有复制构造函数
KeyBoardgame是我工程的名字

然后方法二
static String ^nameA;
static String ^nameB;
public ref class Form1 : public System::Windows::Forms::Form
{
Form1.h里这个位置没错吧
又报错error C3145: “nameA”: 全局或静态变量的类型不能是托管类型“System::String ^”

怎么办怎么办
展开
 我来答
月月亮的日记
2010-11-07 · TA获得超过4.1万个赞
知道大有可为答主
回答量:1332
采纳率:0%
帮助的人:2877万
展开全部
1,主窗体往子窗体传值: 第一种是,在子窗体提供重载构造函数,利用重载构造函数传递值,适用于传值数量比较少; 第二种是,在子窗体中定义一个主窗体对象,然后就可以接收到主窗体的属性值了,适用于传值数量大。 2、从子窗体返回值到主窗体中 利用了子窗体的属性保存子窗体的值,在主窗体中可以访问到子窗体的属性 由于没什么时间,回答简陋了点,希望你可以理解,其实很多问题csdn上都可以找到答案,建议你多上csdn。 推荐文章:
风飞尘落
2015-12-03 · 心理咨询师,中国科学院心理研究所
风飞尘落
采纳数:26463 获赞数:163424

向TA提问 私信TA
展开全部
在form的通用部分使用Public来声明变量
在另一个窗体中使用前一个窗体的这个使用Public来声明的变量的使用格式如下:
窗体名.变量名
e.g:
在Form1中的声明部分声明a变量如下:
Public a
在Form2中调用这个变量并把它的值传递到变量b上,代码如下:
b=Form1.a
当然也可以把变量用Public声明在公共模块上,这样可以避免输入窗体名,即直接输入该变量名即可调用该变量的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuhua1433
2010-11-06 · TA获得超过173个赞
知道答主
回答量:79
采纳率:0%
帮助的人:48.2万
展开全部
C#不熟悉,但是在VC++中对于一些少量基本数据(DWORD,int,bool等)可以使用Windows的消息机制,可以由一个窗口把数据当参数投送到另一个窗口,甚至窗口可以是不同进程创建的。所以这种机制也使得无论你的程序用什么语言开发都可以使用,只要是带窗口的。
如果是大量数据并且窗口在同一个进程可以在消息中传递数据地址(如指针、引用等)。
不知道C#支不支持全局变量,否则就更容易传递数据了。
发送消息使用的API是SendMessage或PostMessage你可以搜索下这两个函数的用法,网上很多资料。也不知道C#把这两个函数放在哪个名字空间里

但是这两个函数有个最关键的参数,就是接受消息的窗口的句柄,否则它们怎么知道发到哪里?不过好在窗口句柄在窗口创建后就是不变的。

另有一个参数就是消息号,消息号小于WM_USER(16进制值为0x400)的消息是系统使用的,所以最好不要去使用,用大于0x400,如两个窗口约定使用0x408,0x500等.
还有两个参数可以随便设置了,当然你得用它们来传递你的数据

当发送消息后,接受消息的窗口的消息循环中就可以自由处理了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小兔儿爹
2010-10-29 · 超过21用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:47.2万
展开全部
用的是什么编译工具?反正不是VC6.0~
不知道你是不是在form2关闭以后,才在form1中获得form2中输入的信息?
那就提供一些思路吧。
在form2中输入的信息,在form2中可以获得的吧?然后在form2中写两个函数,类似:
string form2::getText1()
{
return text1;
}
然后在你的button1_Click里面,form2->getText1();
不知道能不能实现呢~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenliefen
2010-10-26 · TA获得超过496个赞
知道小有建树答主
回答量:133
采纳率:0%
帮助的人:128万
展开全部
方法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中直接就可以赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
80676535
2010-10-26 · TA获得超过477个赞
知道小有建树答主
回答量:1316
采纳率:0%
帮助的人:875万
展开全部
想简单的传个变量,直接定义成与theApp一样的全局变量。然后就随便你用了。

如果想用指针方式引用,那必须保证窗口类的生存周期。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式