動態產生TEdit該如何處理OnChange事件 |
答題得分者是:taishyang
|
yeeddt
初階會員 發表:18 回覆:28 積分:29 註冊:2008-11-10 發送簡訊給我 |
各位前輩好:
我現在正在寫一個讓電腦解數獨的程式,所以利用動態物件產生81個Tedit。 想讓使用者只能輸入1~9的數字,但是不知道該如何對動態物件指定事件。 bruce0211前輩分享的BCB心得中Tag & Hint 屬性的妙用裡有提到相關使用方式。 [code cpp] edit[i][j]->forbidden=&FF_Plu_MouseDown; //此行顯示錯誤因forbidden不是TEdit的member [/code] 順便請教&FF_Plu_MouseDown所代表的意義,是否僅代表一個變數? 希望前輩能幫幫忙,謝謝! 編輯記錄
yeeddt 重新編輯於 2008-12-14 18:11:25, 註解 無‧
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站網頁顯示的關係
應該是edit[i][j]->OnMouseDown FF_Plu_MouseDown這個是你為動態元件所寫的MouseDown事件procedure ===================引 用 yeeddt 文 章=================== 各位前輩好: 我現在正在寫一個讓電腦解數獨的程式,所以利用動態物件產生81個Tedit。 想讓使用者只能輸入1~9的數字,但是不知道該如何對動態物件指定事件。 bruce0211前輩分享的BCB心得中Tag & Hint 屬性的妙用裡有提到相關使用方式。 [code cpp] edit[i][j]->forbidden=&FF_Plu_MouseDown; //此行顯示錯誤因forbidden不是TEdit的member [/code] 順便請教&FF_Plu_MouseDown所代表的意義,是否僅代表一個變數? 希望前輩能幫幫忙,謝謝! |
yeeddt
初階會員 發表:18 回覆:28 積分:29 註冊:2008-11-10 發送簡訊給我 |
謝謝前輩的解答!
之前請教過前輩元件陣列的使用方式,但是二維陣列卻無法依樣畫葫蘆。 [code cpp] void __fastcall TForm1::FF_Plu_MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { bv[((TLabel *)Sender)->Tag]->Style=bsLowered; } [/code] 我想按照上面的方式改成二維陣列,是不是要改變一下 TObject *Sender的寫法才能符合? [code cpp] //這是我自己宣告的OnChange事件 void __fastcall TFormMain::OnChange(TObject *Sender) { edit[ ][ ]->Enabled=false; //不知該如何在[ ]中加入TObject *Sender } [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
yeeddt
初階會員 發表:18 回覆:28 積分:29 註冊:2008-11-10 發送簡訊給我 |
前輩一個反問讓我做了點測試來確認自己的想法。
原本認為所有edit指向同一個事件後,能利用Sender來判斷是哪個edit。 所以才會有上一個回覆所提到的問題。 但發現自己宣告的OnChange事件並不是我所想的全部edit都會指向這裡。 甚至任何一個edit都無法觸發這個事件,不曉得宣告方式是不是有錯。 [code cpp] //此為Unit1.h class TFormMain : public TForm { __published: // IDE-managed Components TButton *StartBut; TButton *CleanBut; TButton *CloseBut; TButton *StopBut; TButton *showBut; TEdit *Edit1; void __fastcall FormCreate(TObject *Sender); void __fastcall CleanButClick(TObject *Sender); void __fastcall CloseButClick(TObject *Sender); void __fastcall showButClick(TObject *Sender); void __fastcall StartButClick(TObject *Sender); void __fastcall Edit1Change(TObject *Sender); private: // User declarations void __fastcall TFormMain::OnChange(TObject *Sender); //在此加入我設定的事件 public: // User declarations __fastcall TFormMain(TComponent* Owner); }; [/code] [code cpp] //Unit1.cpp edit[i][j]->OnChange; //並在產生動態物件的迴圈中加入此行 //但是這行有沒有加入我判斷不出差別 void __fastcall TFormMain::OnChange(TObject *Sender) { int x; if (TryStrToInt(edit[1][1]->Text,x)){ //依照原本的想法在edit[1][1]輸入非1~9的數字會ShowMessage但是毫無反應 switch (x) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: break; default: edit[1][1]->Text=""; ShowMessage("請輸入數字1~9"); } } else{ edit[1][1]->Text=""; ShowMessage("請輸入數字1~9"); } } [/code] 再麻煩前輩幫幫忙了! |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
參考看看吧
[code cpp] class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // User declarations void __fastcall MyEditChange(TObject *Sender); public: // User declarations __fastcall TForm1(TComponent* Owner); }; #define EDT_ROW 2 #define EDT_COL 2 TEdit *edt[EDT_ROW][EDT_ROW]; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { for (int i=0; i edt[i][j]->Parent = this; edt[i][j]->Width = 20; edt[i][j]->Height = 20; edt[i][j]->Left = j*edt[i][j]->Width; edt[i][j]->Top = i*edt[i][j]->Height; edt[i][j]->Tag = j 2*i; edt[i][j]->OnChange = MyEditChange; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::MyEditChange(TObject *Sender) { TEdit *edt = (TEdit*)Sender; switch (edt->Tag){ case 0: edt->Text = "0"; break; //故意顯示"0"表示事件有觸發到 case 1: edt->Text = "1"; break; case 2: edt->Text = "2"; break; case 3: edt->Text = "3"; break; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { for (int i=0; i edt[i][j] = NULL; } } } //--------------------------------------------------------------------------- [/code]
編輯記錄
taishyang 重新編輯於 2008-12-15 16:08:27, 註解 無‧
|
yeeddt
初階會員 發表:18 回覆:28 積分:29 註冊:2008-11-10 發送簡訊給我 |
|
kostin
一般會員 發表:18 回覆:43 積分:22 註冊:2010-03-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |