全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1710
推到 Plurk!
推到 Facebook!

不同Form間元件的使用

答題得分者是:taishyang
jclc6500
一般會員


發表:3
回覆:4
積分:1
註冊:2009-06-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-24 17:18:49 IP:140.127.xxx.xxx 訂閱
首先請原諒新手的發問,因為有點急
小弟已經爬了很多類似的文章
但可能因為學得不夠實在不知道我程式的問題出在哪裡
希望能夠得到高手的幫助

我要的程式其實應該算很簡單
就是兩個Form,其檔案個別是Unit1.cpp Unit1.h Unit2.cpp Unit2.h
我想要的是Form1裡有一個Edit,而Form2則是由Form1動態產生的新視窗,並希望能在Form2中對Form1的Edit做一些例如加減乘除的運算

而我的程式碼:
//Unit1.cpp
//$$---- Form CPP ----
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
double x = StrToFloat(Edit1->Text);
double y = x/2;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm2 *Form2;
Form2 = new TForm2(Application);
Form2->Show();
}
//---------------------------------------------------------------------------
//Unit2.cpp
//$$---- Form CPP ----
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
extern TForm1 *Form1;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
extern double x;
extern double y;
Label1->Caption = y;
}
//---------------------------------------------------------------------------

結果會出現錯誤如下:
[C Error] Unit1.cpp(10): E2451 Undefined symbol 'Edit1'


希望有高手能教我怎麼解決,感激不盡
文章可能寫的不太好,敬請見諒
------
千萬不能有應付的心態....
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-24 17:50:42 IP:118.169.xxx.xxx 訂閱
看了一下你的程式碼...
你要不要先讓Form1上能做四則運算,再來考慮用Form2來控制Form1?
jclc6500
一般會員


發表:3
回覆:4
積分:1
註冊:2009-06-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-07-24 18:05:33 IP:140.127.xxx.xxx 訂閱
不好意思喔,不是很了解
我現在原因就出在double x = StrToFloat(Edit1->Text);的宣告
假設我寫成double x=30;(就是直接給一個數字)
那程式就沒問題了
但這個數字我想要是有變化的,是由Edit->Text來輸入的...

===================引 用 taishyang 文 章===================
看了一下你的程式碼...
你要不要先讓Form1上能做四則運算,再來考慮用Form2來控制Form1?
------
千萬不能有應付的心態....
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-07-24 18:26:41 IP:118.169.xxx.xxx 訂閱
意思是說,你目前Form1的操作都沒辦法搞定,就要用Form2
因此建議先搞定Form1的操作再考慮Form2的事情


你現在寫的是GUI程式
,是以事件訊息的方式來驅動
因此該在哪個事件中取得Edit->Text就是你目前的問題所在



===================引 用 jclc6500 文 章===================
不好意思喔,不是很了解
我現在原因就出在double x = StrToFloat(Edit1->Text);的宣告
假設我寫成double x=30;(就是直接給一個數字)
那程式就沒問題了
但這個數字我想要是有變化的,是由Edit->Text來輸入的...

jclc6500
一般會員


發表:3
回覆:4
積分:1
註冊:2009-06-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-07-24 19:19:03 IP:59.127.xxx.xxx 訂閱
那是我先在Form1上做運算,其結果再給Form2使用嗎?
請問如果可以的話,能Show給我看一個簡單的範例嗎?
因為我先在Form1運算完後,由Form2叫出那個結果,但還是失敗
真的是寫程式的新手,很不好意思浪費您的時間
===================引 用 taishyang 文 章===================
意思是說,你目前Form1的操作都沒辦法搞定,就要用Form2
因此建議先搞定Form1的操作再考慮Form2的事情


你現在寫的是GUI程式
,是以事件訊息的方式來驅動
因此該在哪個事件中取得Edit->Text就是你目前的問題所在



------
千萬不能有應付的心態....
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-07-24 19:34:55 IP:118.169.xxx.xxx 訂閱
//unit1.h
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include < Classes.hpp >
#include < Controls.hpp >
#include < StdCtrls.hpp >
#include < Forms.hpp >
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
double out_x;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//unit1.cpp
#include < vcl.h >
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
out_x = Edit1->Text.ToDouble()/2;
TForm2 *frm = new TForm2(this);
frm->ShowModal();
delete frm;
}
//---------------------------------------------------------------------------


//unit2.h
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include < Classes.hpp >
#include < Controls.hpp >
#include < StdCtrls.hpp >
#include < Forms.hpp ><br />//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TLabel *Label1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

//unit2.cpp
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)
{
Label1->Caption = Form1->out_x;
}
//---------------------------------------------------------------------------

===================引 用
jclc6500 文 章===================
因為我先在Form1運算完後,由Form2叫出那個結果,但還是失敗


編輯記錄
taishyang 重新編輯於 2009-07-24 19:43:03, 註解 無‧
taishyang 重新編輯於 2009-07-24 19:43:52, 註解 無‧
jclc6500
一般會員


發表:3
回覆:4
積分:1
註冊:2009-06-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-07-24 20:27:33 IP:59.127.xxx.xxx 訂閱
原來如此,非常感激您耐心的解答

由於時間的關係,我之前都只有看BCB的書來學習寫這個程式
所以一些比較深入的部分都不懂

對於您提供的程式,我了解我的錯誤在哪裡,但有些部份想再請教一下
像是new TForm2(this);跟我之前用的new TForm2(Application);有什麼不同嗎?
因為我試了一下也是OK




===================引 用 taishyang 文 章===================

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

void __fastcall TForm1::Button1Click(TObject *Sender)
{
out_x = Edit1->Text.ToDouble()/2;
TForm2 *frm = new TForm2(this);
frm->ShowModal();
delete frm;
}
//---------------------------------------------------------------------------




------
千萬不能有應付的心態....
系統時間:2017-10-24 8:33:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!