線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1450
推到 Plurk!
推到 Facebook!

ListView 與 Form

答題得分者是:ENIX007
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-20 11:50:21 IP:220.130.xxx.xxx 未訂閱
請問各位: 我在listview會出現內容,每次在一item dbclick時,會動態開form,並可以同時在不同item開出form,以及要如何關掉form,請各位指導,望有範例說明...謝" 因我試..變成只能每一不同item只能開一次後關掉後, 要在同一item開第二次時,就會開不起來,造成程式當掉
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-20 13:58:34 IP:203.70.xxx.xxx 未訂閱
kenbcb您好 開新專案,File->New Form,Project->Option,將Form2設為Available forms, Unit1.cpp加入#include "Unit2.h" 然後...  
Unit1.cpp
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TListItem *item;
  for (int i=0 ; i<10 ; i  )
  {
    item = ListView1->Items->Add();
    item->Caption = i;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
  TListItem *select = ListView1->Selected;
  if (select == NULL)
    return;
  Form2 = new TForm2(this);
  Form2->Caption = select->Caption;
  Form2->Show();
}
Unit2.cpp    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree;
}
這樣就可以了 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-20 15:31:38 IP:61.222.xxx.xxx 未訂閱
可是這樣如何存送資料到指定的form中
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-20 16:49:54 IP:203.70.xxx.xxx 未訂閱
kenbcb您好 基本宗旨是只要能記住Form1與Form2間的關聯即可,因此做法很多, 小弟提供一種作參考,在Form2多放一個Label,Form1放一個Button, 當Button按下時只有在第4個item所對應的Form2有被產生時才有作用... 另外我也限制了一個item只能產生一個Form2...  
 
unit1.h    #include "Unit2.h"
class TForm1 : public TForm
{
__published:        // IDE-managed Components
  TListView *ListView1;
  TButton *Button1;
  void __fastcall FormCreate(TObject *Sender);
  void __fastcall ListView1DblClick(TObject *Sender);
  void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
public:                // User declarations
  __fastcall TForm1(TComponent* Owner);
  TForm2 *array[10];
};    unit1.cpp    void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TListItem *item;
  for (int i=0 ; i<10 ; i  )
  {
    item = ListView1->Items->Add();
    item->Caption = i;
    array[i] = NULL;  //初始陣列
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
  TListItem *select = ListView1->Selected;      if (select == NULL)
    return;
  if (array[select->Index] != NULL)  //該item已產生Form2
    return;
  Form2 = new TForm2(this);
  array[select->Index] = Form2;
  Form2->Caption = select->Caption;
  Form2->Tag = select->Index; //Form1的ListItem與Form2的關聯
  Form2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (array[3] != NULL)
    array[3]->Label1->Caption = "OK";
}    unit2.cpp
#include "Unit1.h"
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Form1->array[Tag] = NULL;  //關閉前將Form1陣列對應位置清除
  Action = caFree;
}
可以從這方向再思考,修改 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
Titan_Lin
一般會員


發表:10
回覆:6
積分:3
註冊:2004-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-27 14:37:22 IP:210.202.xxx.xxx 未訂閱
引言: kenbcb您好 開新專案,File->New Form,Project->Option,將Form2設為Available forms, Unit1.cpp加入#include "Unit2.h" 然後...
Unit1.cpp
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  TListItem *item;
  for (int i=0 ; i<10 ; i  )
  {
    item = ListView1->Items->Add();
    item->Caption = i;
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
  TListItem *select = ListView1->Selected;
  if (select == NULL)
    return;
  Form2 = new TForm2(this);
  Form2->Caption = select->Caption;
  Form2->Show();
}
Unit2.cpp    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree;
}
這樣就可以了 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ < face="Verdana, Arial, Helvetica"> 不好意思 對於你上述的文章 我有三個問題耶.. 第一: "將Form2設為Available forms" 什麼是available form? 這樣做有什麼用意嗎? 如果不設為Available forms 會怎麼樣嗎? 第二: Form2 = new TForm2(this); Form2->Caption = select->Caption; Form2->Show(); 以上這樣做的意義是要讓Form2有用到的時候才分配記憶體給他嗎? 還有我一直不知道"Form2 = new TForm2(this);"的確切意義 雖然一直看到別人在用,可是自己都不了解... 第三: "Action = caFree;" 是什麼意思呢? 不好意思 麻煩你了...
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-27 15:13:20 IP:203.70.xxx.xxx 未訂閱
Titan_Lin您好 1.您可以打開Project->View Source,這是BCB WinMain()所在位置,在try{} 裡您可以看到Application->CreateForm()這個函式,假設現在有Form1,Form2, 都在Auto-Create forms中,此時將Form2移到Available forms裡,您會發現BCB 自動將Form2的Application->CreateForm()拿掉,也就是說在Auto-Create forms 裡的,當程式啟動時就已經載入,已經配置記憶體了,因此當您的Auto-Create forms 越多,程式初始時的時間也就越久... 而Available forms意思就是程式啟動時並不載入,等到程式需要時再使用new 等指令來配置記憶體...當然,程式結束前,由new所配置物件要自己刪除囉... 例如使用delete等等...    2.是的,因為是使用BCB宣告的全域指標變數,因此Form2要設成Available forms, 否則BCB於程式啟動時會配置一個Form2,你再用new配置的話,就蓋掉原先配置好 的記憶體,而導致記憶體流失!!另外,有關 Form2 = new TForm2(this); 就請您參考這篇 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=53956 3.釋放記憶體...類似delete指令,詳情請參考OnClose()事件的Help 參考看看 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
系統時間:2024-11-25 16:47:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!