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

如何游標移到另一個欄位就計算處理上一個欄位的東西 ?

答題得分者是:g6101
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-22 20:45:35 IP:203.67.xxx.xxx 未訂閱
我該用哪個事件呢 ? 一堆OnK..OnChan...On什麼的好像都是要離開還是做成按儲存時才去處理!! 能不能換一個欄位就處理一個?? 因為要處理的東西是整個欄位確定後再處理!一個接一個,不要全部完成再處理!! 謝謝
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-22 22:55:12 IP:163.29.xxx.xxx 未訂閱
e_snare您好: 不知你要何種元件?先假設你要用的是TStringGrid元件,請參考以下的程式碼
 AnsiString NewEditText = NULL;
AnsiString OldEditText = NULL;
int getCol,getRow;    void __fastcall TForm1::StringGrid1GetEditText(TObject *Sender, int ACol,
      int ARow, AnsiString &Value)
{
   OldEditText = Value;  //取得舊字串
   getCol = ACol;
   getRow = ARow;
}
//----------------------
void __fastcall TForm1::StringGrid1SetEditText(TObject *Sender, int ACol,
      int ARow, const AnsiString Value)
{
   NewEditText = Value;  //取得新字串
   getCol = ACol;
   getRow = ARow;
}
//----------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
   AnsiString str;
   if (NewEditText != NULL && NewEditText != OldEditText) { //當條件成立代表被修改!
     //加入你要對StringGrid1->Cells[getCol][getRow]處理的動作
     str.sprintf("欄位(Cells[%d][%d])內容(%s)被更動!",getCol,getRow,StringGrid1->Cells[getCol][getRow]);
     ShowMessage(str);
     OldEditText = NULL; }
   NewEditText = NULL;
}
//----------------------
void __fastcall TForm1::StringGrid1Exit(TObject *Sender)
{
   //焦點要從StringGrid1轉移到其它元件時...
   AnsiString str;
   if (NewEditText != NULL && NewEditText != OldEditText) { //當條件成立代表被修改!
     //加入你要對StringGrid1->Cells[getCol][getRow]處理的動作
     str.sprintf("欄位(Cells[%d][%d])內容(%s)被更動!",getCol,getRow,StringGrid1->Cells[getCol][getRow]);
     ShowMessage(str);
     OldEditText = NULL; }
   NewEditText = NULL;
}
//-----------------------
◎天長地久有時盡,追求知識無絕期!
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-23 00:02:42 IP:203.67.xxx.xxx 未訂閱
你好 我是用TLabeledEdit 假如現在有兩個欄位 當我從第一個欄位離開時 也就是到第二個欄位時 那第一個欄位的資料就在背後進行處理,例如計算總數等等!! 你的程式碼我有看一下 對我來說,我想是有幫助,但這個範例似乎高過的的需求, 我也一時只看懂一點點耶!! 不過我還是會保存下來的!!謝謝了!! 發表人 - e_snare 於 2004/04/23 00:03:21
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-23 00:09:09 IP:163.29.xxx.xxx 未訂閱
以下是用TLabeledEdit元件的方法

.h
public:                // User declarations
        void __fastcall MyClick(TObject *Sender);
        void __fastcall MyChange(TObject *Sender); 
.cpp    TLabeledEdit *src = NULL;
TForm1 *Form1;
//-------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   LabeledEdit1->OnClick = MyClick;
   LabeledEdit1->OnChange = MyChange;
   LabeledEdit2->OnClick = MyClick;
   LabeledEdit2->OnChange = MyChange;
   LabeledEdit3->OnClick = MyClick;
   LabeledEdit3->OnChange = MyChange;
}
//-------------------
void __fastcall TForm1::MyClick(TObject *Sender)
{
   if (src == NULL) { return ; }
   AnsiString str;
   str.sprintf("%s內容(%s)已變更",src->Name,src->Text);
   ShowMessage(str);
   //在這裡加入你要對上一個TLabeledEdit元件處理的動作
   src = NULL;
}
//-------------------
void __fastcall TForm1::MyChange(TObject *Sender)
{
   src = dynamic_cast(Sender);
}
◎天長地久有時盡,追求知識無絕期! 發表人 - g6101 於 2004/04/23 00:15:48
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-23 02:00:41 IP:203.67.xxx.xxx 未訂閱
謝謝 可以了。    還有一個問題就是 如果有一個陣列 AnsiString Buf[2]; 它是在別的function裡,分別是這兩個欄位處理過的東西!    那以上面的程式來說,如果 void __fastcall TForm1::MyClick(TObject *Sender) {    if (src == NULL) { return ; }    AnsiString str;    str.sprintf("%s內容(%s)已變更",src->Name,src->Text);    ShowMessage(str);    //在這裡加入你要對上一個TLabeledEdit元件處理的動作    如何取得個別的陣列裡的值?我只能ShowMessage(Buf[0]); 卻不知如何能點這個欄位只抓上一個欄位Buf[i], 點上一個欄位,再抓這個欄位Buf[i], src = NULL; } //------------------- AnsiString Buf[2]; 它是在別的function裡,它怎麼去抓相對應的Buf[]
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-23 03:26:59 IP:61.226.xxx.xxx 未訂閱
再參考以下的程式碼  
TLabeledEdit *src = NULL;
AnsiString Buf[3];
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   LabeledEdit1->OnClick = MyClick;
   LabeledEdit1->OnChange = MyChange;
   LabeledEdit2->OnClick = MyClick;
   LabeledEdit2->OnChange = MyChange;
   LabeledEdit3->OnClick = MyClick;
   LabeledEdit3->OnChange = MyChange;       LabeledEdit1->Tag = 0;
   LabeledEdit2->Tag = 1;
   LabeledEdit3->Tag = 2;
   Buf[0] = "內容(1)";
   Buf[1] = "內容(2)";
   Buf[2] = "內容(3)";
}
//------------------
void __fastcall TForm1::MyClick(TObject *Sender)
{
   if (src == NULL) { return ; }
   ShowMessage(Buf[src->Tag]);
   src = NULL;
}
//------------
void __fastcall TForm1::MyChange(TObject *Sender)
{
   src = dynamic_cast(Sender);
}
//------------
◎天長地久有時盡,追求知識無絕期!
系統時間:2024-05-19 7:11:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!