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

怎麼在form2使用form1的vector 

答題得分者是:harpist
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-12 12:38:41 IP:122.123.xxx.xxx 訂閱
下面是我的程式碼,這個程式就是讓使用者去輸入資料,輸入完後可以讓使用者去進行挑選,把剛剛輸入錯的或不必要的值給刪掉。
我的問題就是當進行挑選時是跳出另一個form(也就是form2),在form2只是將資料給show出來而已(用listbox展示),真正存放的資料還是放在form1裡,所以要刪除資料時也要將form1的資料刪除!簡單的話就是Form2->listbox = form1->vector
所以即使我將form2的listbox的資料刪除,還是要來刪除form1的資料,否則的話,在下次按的時候,listbox還是會將剛剛的刪掉的值給show出來。
另外,如果我要把form2的大小固定住(就是按放大也是這麼大),應該怎麼調,我有試著用什麼borderstyle->bssingle,可是會出現錯誤。
編輯記錄
astro0803 重新編輯於 2007-07-13 16:23:24, 註解 無‧
tylin123
初階會員


發表:33
回覆:53
積分:32
註冊:2003-05-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-15 23:07:45 IP:59.114.xxx.xxx 訂閱

不太清楚你 Form1->Vector 是否與 Form2->listbox. 是 equal level.

但是一個原則是, 如果 Form1 及 Form2 是 global form , 兩者之間應該是可以相互叫用 public variable/objects.
只要相互包含 form1.h 及 form2.h

===================引 用 astro0803 文 章===================
下面是我的程式碼,這個程式就是讓使用者去輸入資料,輸入完後可以讓使用者去進行挑選,把剛剛輸入錯的或不必要的值給刪掉。
我的問題就是當進行挑選時是跳出另一個form(也就是form2),在form2只是將資料給show出來而已(用listbox展示),真正存放的資料還是放在form1裡,所以要刪除資料時也要將form1的資料刪除!簡單的話就是Form2->listbox = form1->vector
所以即使我將form2的listbox的資料刪除,還是要來刪除form1的資料,否則的話,在下次按的時候,listbox還是會將剛剛的刪掉的值給show出來。
另外,如果我要把form2的大小固定住(就是按放大也是這麼大),應該怎麼調,我有試著用什麼borderstyle->bssingle,可是會出現錯誤。
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-20 02:29:16 IP:122.123.xxx.xxx 訂閱
不知道你說的要相互包含form1.h及form2.h怎麼使用說!我現在的問題是當我在form2的lisrbox刪完資料後,把form2關了再開起來,剛刪除的資料又會出現,所以我才要在form2刪除資料的同時順便把form1的vector裡的那筆資料給刪除,但是我就是不懂怎麼在form2裡去叫出這個變數。
我有在form1和form2的檔案裡(Unit2.h和Unit1.h),相互include這二個檔案,所以我可以在form2去呼叫form1的元件,但要叫變數的話就不行,像int、String等,更不用說vector。
我研究很久了,可以的話真的希望能把那部份的程式告訴我那錯了,因為我真的快瘋了><

===================引 用 tylin123 文 章===================

不太清楚你 Form1->Vector是否與 Form2->listbox. 是 equal level.

但是一個原則是, 如果 Form1 及 Form2 是 global form , 兩者之間應該是可以相互叫用 public variable/objects.
只要相互包含 form1.h 及 form2.h


astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-21 01:39:17 IP:122.123.xxx.xxx 訂閱
怎麼都沒人回我問題,太簡單還是我口拙讓大家不懂我的意思呢?
不然有人可以實作一份在form1有一個變數int a=10,然後在form2把他叫出來並改成20的例子
給我看呢?
我主要是不懂得怎麼在form1和form2間去使用彼此設的變數,但是元件我卻叫得出來,例如在Form2叫form1的button1的話:
Form1->button1.......
可是如果要叫變數a,我用同上的方法卻會出現錯誤
Form1->a??
↑它是錯的,那我要怎麼改呢?
編輯記錄
astro0803 重新編輯於 2007-07-21 01:41:03, 註解 無‧
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-21 06:35:19 IP:59.105.xxx.xxx 未訂閱
我想不是沒人要回你,太多都是基本觀念...大概修改了一下比較參考看看吧!!
<textarea class="cpp" rows="10" cols="60" name="code">//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> #include //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TButton *Button2; TEdit *Edit1; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); std::vector d1; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif</textarea>
<textarea class="cpp" rows="10" cols="60" name="code"> //--------------------------------------------------------------------------- #include #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) { TForm2 *Form2=new TForm2(Application); for(unsigned int i=0;iListBox1->Items->Append(d1[i]); Form2->ShowModal(); delete Form2; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { d1.push_back(Edit1->Text); Edit1->Text=""; } //--------------------------------------------------------------------------- </textarea>
<textarea class="cpp" rows="10" cols="60" name="code"> //--------------------------------------------------------------------------- #ifndef Unit2H #define Unit2H //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm2 : public TForm { __published: // IDE-managed Components TButton *Button1; TButton *Button2; TListBox *ListBox1; void __fastcall Button1Click(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall Button2Click(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall FormCanResize(TObject *Sender, int &NewWidth, int &NewHeight, bool &Resize); private: // User declarations public: // User declarations __fastcall TForm2(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm2 *Form2; //--------------------------------------------------------------------------- #endif </textarea>
<textarea class="cpp" rows="10" cols="60" name="code"> //--------------------------------------------------------------------------- #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) { } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { for(int i=0;i<=ListBox1->Count-1;i ) { if(ListBox1->Selected[i]) { ListBox1->Items->Delete(i); } } } //--------------------------------------------------------------------------- void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Form1->d1.clear(); for(int i=0;iCount;i ) { Form1->d1.push_back(ListBox1->Items->Strings[i]); } Action=caFree; } //--------------------------------------------------------------------------- void __fastcall TForm2::Button2Click(TObject *Sender) { this->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm2::FormCreate(TObject *Sender) { ListBox1->MultiSelect=true; } //--------------------------------------------------------------------------- void __fastcall TForm2::FormCanResize(TObject *Sender, int &NewWidth, int &NewHeight, bool &Resize) { Resize = false; } //--------------------------------------------------------------------------- </textarea>
------
~§~迷時師渡,悟了自渡~§~
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-22 21:18:11 IP:122.123.xxx.xxx 訂閱
原來是要把變數宣告在.h檔裡才是全域變數唷!!
我終於懂了~太感謝h大的幫忙了!這問題實在想很久也問很久,但每個人都叫我使用form1->變數名,但我就是try不出來呀,經由h大的幫忙,讓我豁然開朗了。
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-23 12:55:07 IP:59.105.xxx.xxx 未訂閱
找本書把基本概念建立一下...不是把變數宣告在.h檔裡就才是全域變數

===================引 用 astro0803 文 章===================
原來是要把變數宣告在.h檔裡才是全域變數唷!!
我終於懂了~太感謝h大的幫忙了!這問題實在想很久也問很久,但每個人都叫我使用form1->變數名,但我就是try不出來呀,經由h大的幫忙,讓我豁然開朗了。
------
~§~迷時師渡,悟了自渡~§~
astro0803
一般會員


發表:18
回覆:30
積分:9
註冊:2007-05-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-23 17:26:23 IP:122.123.xxx.xxx 訂閱
喔~原來這樣不是全域變數唷!
基本的語法我是會,然後c 我沒有去研究他的架構,但因專題需要,所以我只能硬著頭皮,一邊寫一邊學!書的話我是有看bcb完全攻略,但翻一下他其實也沒有對c 的架構做解釋,也只是一些元件的簡介而已= =",我想我再去把螞蟻書拿出來仔細讀好了!還是h大有知道那些好書或好站可以跟我介紹一下嗎^^
編輯記錄
astro0803 重新編輯於 2007-07-23 18:01:10, 註解 無‧
系統時間:2024-05-04 11:50:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!