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

請問EditChange的問題?

尚未結案
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-12 10:34:26 IP:163.28.xxx.xxx 未訂閱
void __fastcall TForm1::Edit6Change(TObject *Sender)
{
extern double a[200][2];
extern double x[200];
extern int num;
if (Edit6->Text==""||Edit6->Text=="-")
  {
  Edit9->Text="";
  return;
  }
double input=StrToFloat(Edit6->Text);
double result;
for (int i=0;i<=num-2;i  )
  {
  if (input>=a[i][0]&&inputText=FloatToStr(result);    }
 
下面的for敘述是計算過程,如果測試0以上的值都沒有問題,但是在測試負值時,才輸入負號就出現error,所以必須先輸入數字再輸入負號,但我在前面已經設下if的條件了,為何還是不能處理這問題,可以請教一下各位先進嗎,謝謝!!
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-12 12:14:22 IP:61.228.xxx.xxx 未訂閱
se0528, 問題出在你先輸入數字在輸入-號,假如你輸入1.112-,當你打入-號時,這個字串就不是符合數字格式,所以你用StrToFloat的時候就會出現錯誤,所以在你做轉換前,先應當判斷輸入的是否為數字格式.
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-12 12:38:31 IP:163.28.xxx.xxx 未訂閱
抱歉,可能是我敘述的不夠詳細,我指的是先輸入數字,再到最前面去輸入負號,因為EditChange會在任何改變的同時計算結果一次,當我一輸入負號,電腦就已經開始運算,而會出現"-" is not a floating point value 的訊息,謝謝!!
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-12 12:48:01 IP:61.229.xxx.xxx 未訂閱
To se0528 為什麼不在 OnEnter()的 event 內處理,這樣就不會有你所說的問題?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-12 13:11:47 IP:218.19.xxx.xxx 未訂閱
se0528 您好:    我測試過您的程式碼,先輸入 "-" 號時並不會出現錯誤,您的問題可能不是出在這裡,您再檢查看看是否 Edit6 有設置其它的相關事件處理?例如 OnKeyDown, OnKeyUp, OnKeyPress 等。    另外您應該要檢查並限制輸入的字元,如果輸入的字元含有空白字元等 "非數字" 的字元時,就會出現錯誤,對於這個動作可以參考下列這篇,我回覆其他網友的作法中的 OnKeyPress:    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=64476 發表人 - RedSnow 於 2005/05/12 13:19:50
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-12 18:42:32 IP:163.28.xxx.xxx 未訂閱
我有檢查過我的程式,我很確定 Edit6 的相關事件處理 OnKeyDown, OnKeyUp, OnKeyPress 都沒有設置任何動作耶!!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-12 20:22:55 IP:218.19.xxx.xxx 未訂閱
se0528 您好:    我再次試過的結果,依然沒有發生問題,無論是先輸入減號號,或是先輸入數字後再到前方輸入減號,結果都是一樣的,因此我還是覺得您可能在無意中輸入了減號、小數點及數字以外的字元。 可否請您按下列方式做個測試: 1. 確認一下 Edit6 的內容在程式啟動時是完全空的 (Edit6->Text = "";)。 2. 增加一個 OnKeyPress 事件如下所示:
void __fastcall TForm1::Edit6KeyPress(TObject *Sender, char &Key)
{
    if(Key > 26 && (Key < '0' || Key >'9') &&
        (Key != '-' || Edit6->Text.Length() > 0 && Edit6->SelLength != Edit6->Text.Length()) &&
        (Key != '-' || Edit6->SelStart > 0 || Edit6->Text.Pos('-') != 0) &&
        (Key != '.' || Edit6->Text.Pos('.') != 0)){
        Key = NULL;
    }
}
這樣子應該可以確保不會輸入 "會導致錯誤" 的字元,看看是否能解決您的問題? 發表人 - RedSnow 於 2005/05/12 20:30:48
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-12 20:33:25 IP:163.28.xxx.xxx 未訂閱
我試了!!但是出現 [C Error] Unit1.cpp(498): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(498): E2293 ) expected [C Error] Unit1.cpp(498): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(498): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(498): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(499): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(499): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(500): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(500): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(501): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(501): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(501): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(501): E2129 Character constant too long (or empty) [C Error] Unit1.cpp(505): E2377 If statement missing )
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-12 21:02:33 IP:218.19.xxx.xxx 未訂閱
真奇怪....,我剛才又直接由這裡將程式碼複製回我的程式中,再度測試後也沒有問題啊?可否請您把您現在的 OnKeyPress 程式碼整段貼上來,我看看是否在複製的過程中漏了什麼?    附註:請將發生錯誤的位置與行號順便標示一下 (僅在第一個錯誤處加上標示,並註明行號即可) 發表人 - RedSnow 於 2005/05/12 21:11:13
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-12 22:46:32 IP:163.28.xxx.xxx 未訂閱
 
if(Key > 26 && (Key < ''0'' || Key >''9'') &&
        (Key != ''-'' || Edit6->Text.Length() > 0 && Edit6->SelLength != Edit6->Text.Length()) &&
        (Key != ''-'' || Edit6->SelStart > 0) &&
        (Key != ''.'' || Edit6->Text.Pos(''.'') != 0)){
        Key = NULL;
    }
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-12 22:50:14 IP:163.28.xxx.xxx 未訂閱
是版本的問題嗎?我是用BCB6.0!!
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-05-12 22:55:06 IP:163.28.xxx.xxx 未訂閱
 
if(Key > 26 && (Key < ''0'' || Key >''9'') &&
        (Key != ''-'' || Edit6->Text.Length() > 0 && Edit6->SelLength != Edit6->Text.Length()) &&
        (Key != ''-'' || Edit6->SelStart > 0) &&
        (Key != ''.'' || Edit6->Text.Pos(''.'') != 0)){
        Key = NULL;
    }
錯誤訊息停在第一行,在 (Key < ''0'' || Key >''9'') 的 < 符號右邊 !!謝謝
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-05-12 22:59:03 IP:218.19.xxx.xxx 未訂閱
我貼上來的資料如下:
    if(Key > 26 && (Key < '0' || Key >'9') &&
        (Key != '-' || Edit6->Text.Length() > 0 && Edit6->SelLength != Edit6->Text.Length()) &&
        (Key != '-' || Edit6->SelStart > 0 || Edit6->Text.Pos('-') != 0) &&
        (Key != '.' || Edit6->Text.Pos('.') != 0)){
        Key = NULL;
    }
您貼上來的怎麼會變成這個樣子:
if(Key > 26 && (Key < ''0'' || Key >''9'') &&
        (Key != ''-'' || Edit6->Text.Length() > 0 && Edit6->SelLength != Edit6->Text.Length()) &&
        (Key != ''-'' || Edit6->SelStart > 0) &&
        (Key != ''.'' || Edit6->Text.Pos(''.'') != 0)){
        Key = NULL;
    }
我的判斷式裡邊用的全部都是一個單引號 ',您貼上來的卻全部都變成了兩個單引號 ''? 請您將連續兩個單引號的地方全部改成一個單引號,然後再試試看。 附註:Key 是 char 型態,因此比對的字元都是使用單引號括住,不能用雙引號,當然也不能是兩個單引號 (沒有這種標示方式)。 發表人 - RedSnow 於 2005/05/12 23:05:35
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-12 23:22:01 IP:163.28.xxx.xxx 未訂閱
我已經改成這樣了 
if(Key > 26 && (Key < "0" || Key >"9") &&
        (Key != "-" || Edit6->Text.Length() > 0 && Edit6->SelLength != Edit6->Text.Length()) &&
        (Key != "-" || Edit6->SelStart > 0 || Edit6->Text.Pos("-") != 0) &&
        (Key != "." || Edit6->Text.Pos(".") != 0)){
        Key = NULL;
現在出現 [C Error] Unit1.cpp(499): E2034 Cannot convert 'char' to 'char *' [C Error] Unit1.cpp(499): E2034 Cannot convert 'char' to 'char *' [C Error] Unit1.cpp(500): E2034 Cannot convert 'char' to 'char *' [C Error] Unit1.cpp(501): E2034 Cannot convert 'char' to 'char *' [C Error] Unit1.cpp(502): E2034 Cannot convert 'char' to 'char *' [C Error] Unit1.cpp(505): E2134 Compound statement missing } 在跟剛剛相同的位置上
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-05-12 23:26:08 IP:218.19.xxx.xxx 未訂閱
請您將雙引號改成單引號好嗎?
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-05-12 23:45:11 IP:163.28.xxx.xxx 未訂閱
我修改好了,程式可以執行了,但是同樣的問題依然出現耶,我可以把整個檔案寄給你,請你幫我看問題到底出在哪嗎?謝謝!!還我,我不知道如何上傳檔案上去,我應該如何送到你手中你比較方便?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-05-13 00:24:15 IP:218.19.xxx.xxx 未訂閱
您的程式很大嗎?如果不大的話,可以直接貼上來,要不然就上傳到 "會員求助程式檔案上傳區" 好了,上傳的方式如下: 1. 點選下列連結: http://delphi.ktop.com.tw/post.asp?method=Topic&FORUM_ID=97&CAT_ID=31&Forum_Title=%B7%7C%AD%FB%A8D%A7U%B5%7B%A6%A1%C0%C9%AE%D7%A4W%B6%C7%B0%CF 2. 找到畫面上標示著 "上傳檔案:" 字樣的地方,然後點選其右方標示著 "瀏覽..." 字樣的按紐。 3. 使用一般我們開啟檔案的操作方式來找您電腦上的檔案,點選欲上傳的檔案後點擊選檔視窗上的 "開啟" 按紐。 4. 記得圈選主題分類、程式語言項目的內容,並在主題欄內填上適當文字。 5. 往下找到標示著 "存入新主題" 的按鈕,點擊該按鈕即可。 我還沒上傳過檔案,請您仔細瀏覽上傳頁面上的各個項目與標示,以確保我上述的簡述沒有遺漏重要步驟。 我使用的是 BCB4,或許與 BCB6 有些許差異,但我會試看看,希望能幫您找出問題的所在。 因為我自己測試都沒有問題,因此請您說明您程式發生問題時的測試步驟為何?好讓我有個測試的方向。 發表人 - RedSnow 於 2005/05/13 00:29:38
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-05-13 03:52:02 IP:163.28.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70890 你好,我已經將檔案上傳的上述位置了,真的真的很感謝你肯花時間幫我這個初學者的忙,謝謝你!!檔案中的程式已經按照你教我的方式多加了OnKeyPress 的敘述,不過我剛先前一樣只要在 Edit6 中才輸入"-"號,便出現 "-" is not a floating point value 的訊息,並不會如預期避掉這個錯誤,換句話說,當我想要測試帶負號的數值時,被迫必須先打數字的部分,在到最前面打上負號,才可以求出內插值,謝謝!! !!
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-05-13 10:52:42 IP:61.228.xxx.xxx 未訂閱
se0528,    你原先所PO出來的CODE跟你完整的CODE就有不同的地方,你的問題出在標示紅色的地方
if (Edit6->Text==""||StrToFloat(Edit6->Text)>a[num-1][0] 0.000000000001||StrToFloat(Edit6->Text)Text=="-")
  {
  Edit9->Text="";
  return;
  }
不應該把紅色的部分放在這個判斷式裡,要放在之後再判斷.
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-05-13 11:03:32 IP:218.19.xxx.xxx 未訂閱
se0528 您好:    我查看過您的程式碼了,您程式內 Edit6 物件的 OnChange 事件中的判斷式已經不是像您在此處貼出來的那個樣子了,原先的 OnChange 事件中的判斷敘述如下:
if (Edit6->Text==""||Edit6->Text=="-")
  {
  Edit9->Text="";
  return;
  }
但是您上傳檔案 Edit6 的 OnChange 事件中的判斷式則如下:
if (Edit6->Text==""||StrToFloat(Edit6->Text)>a[num-1][0] 0.000000000001||StrToFloat(Edit6->Text)Text=="-")
  {
  Edit9->Text="";
  return;
  }
這根本就不一樣,判斷後的結果自然也不同,我不知道您加上去的那些判斷條件的用途為何?但是我建議您將該判斷式拆成兩段來處理,例如:
if (Edit6->Text==""||Edit6->Text=="-") {
    Edit9->Text="";
    return;
}
if (StrToFloat(Edit6->Text)>a[num-1][0] 0.000000000001||StrToFloat(Edit6->Text)Text="";
    return;
}
如果您再發生一些錯誤的狀況時,請千萬要說明清楚,否則大家會被搞得一頭霧水,同時也會延誤您自己解決問題的時間,最保險的作法就是將發生問題當時的相關程式碼重新貼上來,然後將操作過程與發生錯誤的狀況描述清楚,這樣子會比較好。
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-05-13 12:00:57 IP:163.28.xxx.xxx 未訂閱
原來如此,真的是非常抱歉,我以為這不是問題的核心,所以並沒有提出,真的是很抱歉,浪費各位寶貴的時間,可以順便請教一下,為什麼這些條件句不能寫在一起,謝謝!!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#22 引用回覆 回覆 發表時間:2005-05-13 12:25:57 IP:218.19.xxx.xxx 未訂閱
se0528 您好:
引言:以順便請教一下,為什麼這些條件句不能寫在一起,謝謝!!
因為 StrToFloat() 不可以處理數字、小數點、負號...等之外的字元,而且負號也不能單獨存在,否則也會產生錯誤。 所以您若是將那些判斷式都寫在一起的話,就會在輸入 "-" 符號時產生錯誤,所以必須要拆開處理,首先要確認能讓 StrToFloat() 正常處理的資料才讓它過關,否則就趕回去....。 發表人 - RedSnow 於 2005/05/13 12:32:04
se0528
一般會員


發表:13
回覆:22
積分:7
註冊:2005-05-04

發送簡訊給我
#23 引用回覆 回覆 發表時間:2005-05-13 13:00:26 IP:163.28.xxx.xxx 未訂閱
我瞭解了,謝謝這位大哥!!
jimmy_and_you
初階會員


發表:20
回覆:74
積分:33
註冊:2003-05-12

發送簡訊給我
#24 引用回覆 回覆 發表時間:2005-05-14 00:52:26 IP:61.64.xxx.xxx 未訂閱
引言: 原來如此,真的是非常抱歉,我以為這不是問題的核心,所以並沒有提出,真的是很抱歉,浪費各位寶貴的時間,可以順便請教一下,為什麼這些條件句不能寫在一起,謝謝!!
應該試著用F7或F8一步一步Debug就知道錯在哪裡...
系統時間:2024-04-19 10:08:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!