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 ^”
怎么办怎么办 展开
首先我创建了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 ^”
怎么办怎么办 展开
展开全部
在form的通用部分使用Public来声明变量
在另一个窗体中使用前一个窗体的这个使用Public来声明的变量的使用格式如下:
窗体名.变量名
e.g:
在Form1中的声明部分声明a变量如下:
Public a
在Form2中调用这个变量并把它的值传递到变量b上,代码如下:
b=Form1.a
当然也可以把变量用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等.
还有两个参数可以随便设置了,当然你得用它们来传递你的数据
当发送消息后,接受消息的窗口的消息循环中就可以自由处理了。
如果是大量数据并且窗口在同一个进程可以在消息中传递数据地址(如指针、引用等)。
不知道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();
不知道能不能实现呢~
不知道你是不是在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中直接就可以赋值。
直接将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一样的全局变量。然后就随便你用了。
如果想用指针方式引用,那必须保证窗口类的生存周期。
如果想用指针方式引用,那必须保证窗口类的生存周期。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询