不同Form間元件的使用 |
答題得分者是:taishyang
|
jclc6500
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2009-06-22 發送簡訊給我 |
首先請原諒新手的發問,因為有點急
小弟已經爬了很多類似的文章 但可能因為學得不夠實在不知道我程式的問題出在哪裡 希望能夠得到高手的幫助 我要的程式其實應該算很簡單 就是兩個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 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
jclc6500
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2009-06-22 發送簡訊給我 |
不好意思喔,不是很了解
我現在原因就出在double x = StrToFloat(Edit1->Text);的宣告 假設我寫成double x=30;(就是直接給一個數字) 那程式就沒問題了 但這個數字我想要是有變化的,是由Edit->Text來輸入的... ===================引 用 taishyang 文 章=================== 看了一下你的程式碼... 你要不要先讓Form1上能做四則運算,再來考慮用Form2來控制Form1?
------
千萬不能有應付的心態.... |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
意思是說,你目前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 發送簡訊給我 |
那是我先在Form1上做運算,其結果再給Form2使用嗎?
請問如果可以的話,能Show給我看一個簡單的範例嗎? 因為我先在Form1運算完後,由Form2叫出那個結果,但還是失敗 真的是寫程式的新手,很不好意思浪費您的時間 ===================引 用 taishyang 文 章=================== 意思是說,你目前Form1的操作都沒辦法搞定,就要用Form2 因此建議先搞定Form1的操作再考慮Form2的事情 你現在寫的是GUI程式,是以事件訊息的方式來驅動 因此該在哪個事件中取得Edit->Text就是你目前的問題所在
------
千萬不能有應付的心態.... |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
//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叫出那個結果,但還是失敗 |
jclc6500
一般會員 ![]() ![]() 發表:3 回覆:4 積分:1 註冊:2009-06-22 發送簡訊給我 |
原來如此,非常感激您耐心的解答
由於時間的關係,我之前都只有看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; } //---------------------------------------------------------------------------
------
千萬不能有應付的心態.... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |