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

如何讓TEdit元件只能輸入數字

 
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-25 21:56:46 IP:203.204.xxx.xxx 未訂閱
小弟近日在研究如何讓使用者只能輸入數字,以下是個人的心得。如果寫的不好獻醜了^^,如果有更好的方法也請前輩指導一下。
 
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
AnsiString A = ((TEdit *)Sender)->Text ;
A.Insert(Key,((TEdit *)Sender)->SelStart   1);
//如果按下是倒退鍵
if (Key == 0x08) return;
if (!TryStrToInt(A,0))
        Key = 0;    }
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-26 10:55:29 IP:61.63.xxx.xxx 未訂閱
引言: 小弟近日在研究如何讓使用者只能輸入數字,以下是個人的心得。如果寫的不好獻醜了^^,如果有更好的方法也請前輩指導一下。
 
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
AnsiString A = ((TEdit *)Sender)->Text ;
A.Insert(Key,((TEdit *)Sender)->SelStart   1);
//如果按下是倒退鍵
if (Key == 0x08) return;
if (!TryStrToInt(A,0))
        Key = 0;    }
liangnet你好< >: 若是你的方式,這樣有比較直覺嗎< >?
    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 if ((Key<48 || Key>57) && Key!=8)
     Key=0;
}    
這是我喜歡玩的爛招: In Unit.h
    ~~~    private:        // User declarations
        void __fastcall EditWndProc(TMessage&);
        TWndMethod OldEditWndProc;    ~~~        In Unit.cpp    ~~~    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 OldEditWndProc=Edit1->WindowProc;
 Edit1->WindowProc=EditWndProc;
}    void __fastcall TForm1::EditWndProc(TMessage& Message)
{
 if (Message.Msg==WM_CHAR) {
     if ((Message.WParam<48 || Message.WParam>57) && Message.WParam!=8)
         return;
 }     OldEditWndProc(Message);
}    
同意思的!
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-26 11:10:04 IP:211.162.xxx.xxx 未訂閱
赞,真是厉害,liangnet和m8815010两位大大的方法又让我偷学到了哟!嘿嘿,今天真高兴 < class="code"> =============== 人生在勤,不索何获? ===============
------
人生在勤,不索何获?
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-26 13:36:47 IP:218.163.xxx.xxx 未訂閱
m8815010你好: 你的方法也不錯,但是好像無法輸入'-'號。 如果設成能輸入+ -號,那如果符號輸入在數字間,那就不是一個數值了。 我的方法有個缺點就是只能接int型態所能表示的範圍2147483647~ -2147483648。 發表人 - liangnet 於 2004/03/26 13:42:27
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-28 11:36:36 IP:218.173.xxx.xxx 未訂閱
引言: m8815010你好: 你的方法也不錯,但是好像無法輸入'-'號。 如果設成能輸入+ -號,那如果符號輸入在數字間,那就不是一個數值了。 我的方法有個缺點就是只能接int型態所能表示的範圍2147483647~ -2147483648。 發表人 - liangnet 於 2004/03/26 13:42:27
liangnet你好< >: 看了很久,終於了瞭你的意思了< >!一開始不了解為什麼要輸入加減號!後來覺得應該是你要表示正負數用的吧! 1. 我原本的程式不能輸入'-'號是沒錯的,且' '也不行,只有0~9和backspace這11個鍵可以,原因是我看你的題目以為只要這樣做就可以了! class="code"> void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) { if (Edit1->Text=="" && (Key==' ' || Key=='-')) { return; } if ((Key<48 || Key>57) && Key!=8) Key=0; } 1. 這程式只可以在開始字元輸入' '或'-'符號以表示正數或負數用 2. 也可以不輸入'-'或' '號,直接輸入0~9的數字!當然這樣表示這一組數字是正整數 3. 範圍不限 嗯,其實要要求條件可以有很多的要求,就是照著寫程式限制就對了,上面的程式可能不是最簡潔的,但我覺的要求有做到就好! liangnet你覺得有不對再討論吧!
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-28 14:22:16 IP:202.159.xxx.xxx 未訂閱
m8815010你好: 我的負號可以輸入,但是需先讓Text != "" 也就就先輸入數字後再加負號。 你最後寫的那一段程式寫的很簡潔! 呵!現在才發現我怎麼寫的這麼怪… 我是為了不讓使用者輸入一個不是數字的字串才這樣防的。 要做到不能讓 "1234" 變成 "12-34"。 發表人 - liangnet 於 2004/03/28 14:31:20
系統時間:2024-07-06 11:41:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!