如何调用其它窗体的变量?很急,谢谢

huygtt 2008-11-18 05:52:02
问题是这样的,就我有在做用户登录的时候我想调用这个登录的用户名,我怎么可以把这个用户名在其它窗体中实现调用?但是不能在调用这个变量的时候弹出登录窗口,自动实现调用?谢谢。
...全文
83 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huygtt 2008-11-18
  • 打赏
  • 举报
回复
问题解决了,Edit1->Text=Form1->m_szUserName;就可以直接完成,
方法二:直接将Form1的登陆时的数据传到Form2
在呼叫Form2的时候用
TForm2 *f = new TForm2(Application, username, pwd)
Form2->ShwModal();
在Form2那边去接值

这种方法我最开始用的,但是会调用登录窗口出现,虽然可以实现但是很麻烦。
方法三:写一个公用的unit
定义静态static String username = "";
在Form1呼叫Form2的时候写改变username的值
Form1和Form2都去include这个公用的unit直接去取username

这个方法我还没有学会,刚刚试了一下,没得到实际要的结果。
谢谢各位。
jxw1987628 2008-11-18
  • 打赏
  • 举报
回复


//登录窗体的cpp文件中


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

AnsiString strUserName; //这里是它的定义。这个Form对应登录的那个窗体,这个是在Unit2.cpp中

TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)
{

ShowMessage("login ok");
ModalResult = mrOk;
}
//---------------------------------------------------------------------------







//---------------------------------------------------------------------------

// 主窗体的头文件中


#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
#include <DB.hpp>
#include <DBTables.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
Graphics::TBitmap *tmpBitmap ;
protected :
void __fastcall MyPanelWindowProc(TMessage &Msg);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
extern AnsiString strUserName; //这里是外部声明 这个是主窗体的头文件
//---------------------------------------------------------------------------
#endif
yuanreid 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huygtt 的回复:]
我在MAIN.h文件下加入这个语句:
extern AnsiString strUserName;
如果不调用的话就不会出错,一调用就出现下面的这个错误:
[Linker Error] Unresolved external '_strUserName' referenced from E:\票据管理系统\MAIN.OBJ
[/Quote]
全局变量不能只在h文件中声明,需要在cpp文件中同样要定义一下。定义时不需要external关键字
yuanreid 2008-11-18
  • 打赏
  • 举报
回复
如果是采用1楼的方式,我也是这么做的。设置全局变量即可。
huygtt 2008-11-18
  • 打赏
  • 举报
回复
我在MAIN.h文件下加入这个语句:
extern AnsiString strUserName;
如果不调用的话就不会出错,一调用就出现下面的这个错误:
[Linker Error] Unresolved external '_strUserName' referenced from E:\票据管理系统\MAIN.OBJ
Jim@luckeeinc.com 2008-11-18
  • 打赏
  • 举报
回复
方法有很多
方法一:直接去抓 include登陆的窗口的.h文件
Edit1->Text = Form1->UserName;
Edit2->Text = Form1->PassWord;

方法二:直接将Form1的登陆时的数据传到Form2
在呼叫Form2的时候用
TForm2 *f = new TForm2(Application, username, pwd)
Form2->ShwModal();
在Form2那边去接值

方法三:写一个公用的unit
定义静态static String username = "";
在Form1呼叫Form2的时候写改变username的值
Form1和Form2都去include这个公用的unit直接去取username

fieldisme 2008-11-18
  • 打赏
  • 举报
回复

//可以在主窗口的public下定义用户名和密码字符串,比如主窗口是Form1,在登录窗口中包含主窗口的头文件,登录窗
//口关闭时用
Form1->UserName=Edit1->Text;
Form1->PassWord=Edit2->Text;
jxw1987628 2008-11-18
  • 打赏
  • 举报
回复
// 你所的应该是如何将用户名这一信息传递给主窗体对吧?

// 这个其实也不难,你可以定义1个全局变量。1个AnsiString类型的

// 直接在Unit2.cpp或者其头文件中定义即可,如AnsiString strUserName="";

// 用的时候声明1下,在Form1的头文件Unit1.h中的#endif 语句前面放上 extern AnsiString strUserName ;这句

// 在登录的那个窗体里面把用户输入的用户名这一值赋值给strUserName

// 然后在主窗体中就直接得到这个strUserName了,也可以直接用它了。
huygtt 2008-11-18
  • 打赏
  • 举报
回复
是这样的意思,就是我通过登录窗口到一个主窗体以后,然后我要打开菜单中的子菜单,在子菜单的窗体中就需要用到这个登录进来的用户名,我怎样才能调用到空上用户名。比如说,我要更改这个用户名的密码,我就直接调用这个登录进来的用户名就可以了,然后通过这个用户名更改所对应的密码。
jxw1987628 2008-11-18
  • 打赏
  • 举报
回复

// 不是很清楚你的描述,

// 看字面意思好像是你要在主窗体弹出前,先弹出登录窗体


// 若是上面那样,你可以New->Form ,把这个第2个form作为登录时用的窗体,暂时称为Form2把

// 然后在project->options->Forms里面将Form2移动到右边的列表中

// 接下来开始code

// 以下代码是在Project1.cpp中


#include <vcl.h>
#pragma hdrstop
#include "Unit2.h" //注意记得包含这个头文件
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();

TForm2 *loginForm = 0;
loginForm = new TForm2(0); //创建窗体
if(loginForm)
{
//弹出窗体,关于验证用户身份的逻辑可以在Form2里面自己设计
//让他传递1个值,这个值你可以自己设定来表示是否登录成功
if(loginForm->ShowModal()==mrCancel)
{
// 这里是用户关闭登录窗体,或者没有正常登录
return 0;
}
delete loginForm ; //释放内存
loginForm =0 ;
}
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧