kenton 妳好: 我測試過妳的程式之後,將它做了些修改,同時僅可能的加上註解,希望妳能看懂 (
在妳修改程式之前,建議妳先將目前的專案做個備份,以備不時之需),程式中的可視元件也有做些修改如下,這個部份需要妳以手動方式先設定好:
- 妳原先放在 Form2 "確定" 按鈕的 OnClick 事件中,有做新增一筆空記錄資料的動作,這個動作放在該處並不合適,因此我在 Form2 另外增加一個名為 BitBtn5 的按鈕,Caption 設為 "新增",妳原先放在 "確定" 按鈕 OnClick 事件中的 "新增一筆空記錄資料" 的動作移到這裡來處理。
- Form2 "離開" 按鈕的 Kind 屬性改為 bkCustom,以便在其 OnClick 事件中做一些處理。
其它有修改的部份就是程式碼了,我將 Unit1.cpp 與 Unit2.cpp 的內容貼上來,妳自己比對看看好了:
***** Unit1.cpp *****
#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)
{
Form2->Show();
}
//--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->Table1->Open();
Form2->FillTree(TreeView1); // 產生 Form1 的 TreeView 節點資料
Form2->Table1->Close();
} ***** Unit2.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)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
FillTree(Form1->TreeView1); // 重新產生 Form1 的 TreeView 節點
FillTree(TreeView1); // 重新產生 Form2 的 TreeView 節點
}
//--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
Table1->Delete();
}
//--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn3Click(TObject *Sender)
{
DBEdit1->Clear();
DBEdit2->Clear();
DBEdit3->Clear();
DBEdit4->Clear();
}
//--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn4Click(TObject *Sender)
{
// 離開前將空的記錄刪除掉
Table1->First();
while (!Table1->Eof) {
if (Table1Kind->Value == "") { // 如果 Kind 欄位是空的
Table1->Delete(); // 刪除這一筆記錄
}
Table1->Next();
} Table1->Close();
Close();
}
//--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn5Click(TObject *Sender)
{
Table1->Append();
Table1No->Value = "";
Table1Title->Value = "";
Table1Note->Value = "";
Table1Kind->Value = "";
Table1->Post(); DBEdit1->SetFocus(); // 將游標移到 No 欄位去,以方便後續的操作
}
//--------------------------------------------------------------------------- void __fastcall TForm2::FormShow(TObject *Sender)
{
Table1->Open();
FillTree(TreeView1); // 產生 Form2 的 TreeView 節點
}
//---------------------------------------------------------------------------
// 以 Index 來取得 Node 的自定函式
TTreeNode* __fastcall TForm2::GetTreeViewNodeFromIndex(TTreeView *tv, int Index)
{
TTreeNode* node = tv->Items->GetFirstNode(); int I = Index;
while (I != 0 && node != NULL) {
node = node->getNextSibling();
I--;
}
return node;
}
//---------------------------------------------------------------------------
// 產生指定 TreeView 的各個節點資料
void __fastcall TForm2::FillTree(TTreeView *tv)
{
TTreeNode* node;
int Kind; tv->Items->Clear();
tv->Items->Add(NULL, "非常重要");
tv->Items->Add(NULL, "很重要");
tv->Items->Add(NULL, "普通");
tv->Items->Add(NULL, "還好"); Table1->First();
while (!Table1->Eof) {
if (Table1Kind->Value != "") { // 如果 Kind 欄位不是空的
Kind = StrToInt(Table1Kind->Value);
node = GetTreeViewNodeFromIndex(tv, Kind - 1); // 找到對應於 Kind 的主節點
tv->Items->AddChild(node, Table1Title->Value); // 建立子節點
}
Table1->Next();
}
}
程式並未做最佳化考量,妳可以在瞭解我修改的部份之後,設法加強一下。
7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/11/20 21:26:56