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

"CSpinEdit"如何在超過一定範圍,還是顯示原來的數字

答題得分者是:gemi0305
kimi
一般會員


發表:37
回覆:76
積分:22
註冊:2003-07-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-04 12:46:42 IP:61.218.xxx.xxx 未訂閱
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender) {   if(CSpinEdit1->Text!="")      {        if (CSpinEdit1->Text.ToInt()>50)            CSpinEdit1->Text="0";        if(CSpinEdit1->Text.ToInt()<0) CSpinEdit1->Text="50"; } } 可否幫我想一下 例如: 如果先輸入46(在0~50中) 如果在輸入99(超過50的數字) 還是顯示出46
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-04 18:34:56 IP:61.224.xxx.xxx 未訂閱
引言:
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
  if(CSpinEdit1->Text!="")
     {
       if (CSpinEdit1->Text.ToInt()>50)
           CSpinEdit1->Text="0";
       if(CSpinEdit1->Text.ToInt()<0)
           CSpinEdit1->Text="50";
     }
}
可否幫我想一下 例如: 如果先輸入46(在0~50中) 如果在輸入99(超過50的數字) 還是顯示出46
請多一個變數來存 CSpinEdit 在被修改前的數值,例如:
int iCSEvalue;
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
  if(CSpinEdit1->Text!="")
     {
       if(CSpinEdit1->Text.ToInt()>=0
       && CSpinEdit1->Text.ToInt()<=50)
          iCSEvalue=CSpinEdit1->Text.ToInt();
       CSpinEdit1->Text=IntToStr(iCSEvalue);
     }
}
只有在數值是正確時,才存入 iCSEvalue , CSpinEdit 每次都顯示 iCSEvalue 的數值。 而 iCSEvalue 變數可以放在 TForm1 內或是整體變數。 另外,用按下 Enter 時再來判斷可能會比較好。
void __fastcall TForm1::CSpinEdit1KeyPress(TObject *Sender, char &Key)
{
    if(Key==0x0D) // 按 Enter 鍵
    {
       if(CSpinEdit1->Text.ToInt()>=0
       && CSpinEdit1->Text.ToInt()<=50)
          iCSEvalue=CSpinEdit1->Text.ToInt();
       CSpinEdit1->Text=IntToStr(iCSEvalue);
    }
}
沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/08/04 18:37:34
------
http://www.ViewMove.com
kimi
一般會員


發表:37
回覆:76
積分:22
註冊:2003-07-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-04 21:51:35 IP:61.227.xxx.xxx 未訂閱
dllee大大的程式沒有,從0,1,2,3....50,0,1....,50可以一直跑的程式在其中,請大大在幫我想想吧!!
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-05 00:11:40 IP:61.224.xxx.xxx 未訂閱
kimi你好~    首先還是要請把你「輸入方式」設定清楚哦~ 不然很難有滿意的解答~ 我想問的是: 在> > 國泰平安
kimi
一般會員


發表:37
回覆:76
積分:22
註冊:2003-07-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-05 10:38:40 IP:140.134.xxx.xxx 未訂閱
抱歉讓大大沒有一個方向,我是希望用鍵盤直接key值進去,在由程式判斷如果"大於50"的值,就會出現上一個"0~50範圍"的值,但一定要有1~~50,1~~~50這樣的程式在裡面,拜託大大的幫忙
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-05 12:50:50 IP:210.66.xxx.xxx 未訂閱
kimi你好,    參考以下程式碼,已能做到你所說的, 但這不能完全解決,差不能keep 5、6、7、8、9這五個數字,其他都可以。 因為就如前幾篇所說,你要key 50以上的數字時,會先打這五個數字, 所以如果keep的話,輸入50以前的數字,就只能顯示他十位數,    還有,因為寫的很趕,可能要請你幫我看看還有沒有其他bug~ < class="code"> int keepNum=0; void __fastcall TForm1::CSpinEdit1Change(TObject *Sender) { if(CSpinEdit1->Text!="") { if(CSpinEdit1->Text.ToInt()<0) CSpinEdit1->Text="50"; else if(CSpinEdit1->Text.ToInt()>=0 &&CSpinEdit1->Text.ToInt()<5 || CSpinEdit1->Text.ToInt()>=10&&CSpinEdit1->Text.ToInt()<51) keepNum=CSpinEdit1->Text.ToInt(); else if(CSpinEdit1->Text.ToInt()==51) CSpinEdit1->Text="0"; else if(CSpinEdit1->Text.ToInt()>51) CSpinEdit1->Text=IntToStr(keepNum); } } 國泰平安
kimi
一般會員


發表:37
回覆:76
積分:22
註冊:2003-07-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-05 20:43:40 IP:61.227.xxx.xxx 未訂閱
謝謝gemi0305大大,但是在4~10中間的數字,會有問題 如果輸入5~9的數字,再輸入66就會出現4或是10,並不會出現5~9的數字
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-05 21:00:31 IP:61.224.xxx.xxx 未訂閱
kimi你好~    呵~ 我上篇有說了嘛...5~9 我沒keep阿... 因為,我舉個例好了 假使說,你先打一個4(會先被keep住),再輸入66這個數字, 你會先在CSpinEdit上打一個"6"再打一個"6" 當在打第一個"6"的時候,onChange()就啟動了, 所以這個"6"就被"keep"住了,然後當再打一個"6"的時候(因為是66) 因為超過50,所以他會還原之前被keep的資料, 就是"6",而不是之前的那個"4"。    所以當在5~9時,我就不去keep它, 因為我不知道使用者是打的這個6,真的只是6嗎?  還是再等一下又在這個6後面再加一個6...結果超過50了~    但我相信,應該會有解決的辨法, 不過會是更複雜的判斷... 國泰平安
kimi
一般會員


發表:37
回覆:76
積分:22
註冊:2003-07-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-05 23:37:02 IP:61.227.xxx.xxx 未訂閱
謝謝gemi0305大大的幫助,我真的很感謝你
系統時間:2024-06-28 19:27:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!