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

該如何清空資料?

答題得分者是:deity
imissyou
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-17 07:07:59 IP:220.141.xxx.xxx 未訂閱
我使用一個按鈕來清空EDIT內的資料 但是RUN完之後 按下按鈕會出現錯誤視窗 接著就沒有回應了... 請教一下各位 該怎麼處理呢? UNIT如下 //------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Edit1->Text=""; Edit2->Text=""; Edit3->Text=""; Edit4->Text=""; Edit5->Text=""; Edit6->Text=""; Edit7->Text=""; Edit8->Text=""; Edit9->Text=""; Edit10->Text=""; Edit11->Text=""; Edit12->Text=""; Edit13->Text=""; Edit14->Text=""; Edit15->Text=""; } //-------------------------------------------------------------------
RedSnow
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-17 08:24:20 IP:218.19.xxx.xxx 未訂閱
imissyou 您好:    把錯誤訊息也貼上來吧。      7 天天敲鍵盤 v 時時按滑鼠 8
achigo
一般會員


發表:6
回覆:15
積分:4
註冊:2005-05-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-17 10:49:17 IP:210.80.xxx.xxx 未訂閱
引言: 我使用一個按鈕來清空EDIT內的資料 但是RUN完之後 按下按鈕會出現錯誤視窗 接著就沒有回應了... 請教一下各位 該怎麼處理呢? UNIT如下 //------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Edit1->Text=""; Edit2->Text=""; Edit3->Text=""; Edit4->Text=""; Edit5->Text=""; Edit6->Text=""; Edit7->Text=""; Edit8->Text=""; Edit9->Text=""; Edit10->Text=""; Edit11->Text=""; Edit12->Text=""; Edit13->Text=""; Edit14->Text=""; Edit15->Text=""; } //-------------------------------------------------------------------
請將Edit1->Text=""; 改成這樣的做法 Edit1->Clear(); 專注完美近乎苛求~~
------
專注完美近乎苛求~~
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-17 10:56:58 IP:218.15.xxx.xxx 未訂閱
imissyou 您好: 将Form的Edit的TEXT清空,还可以采用下面方法,简明扼要!  
方法一:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   for(int i=0; i<15; i  )
   {
      TEdit* edit=NULL;
      edit=dynamic_cast(FindComponent("Edit" IntToStr(i 1)));
      if(edit)
      {
         edit->Text="";
      }
   }    }
方法二:
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{     for (int i = 1; i <= 15; i  )
  {
   ((TEdit *)FindComponent("Edit" IntToStr(i)))->Text="";
  }    }
 
试试看 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
imissyou
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-17 11:04:05 IP:220.141.xxx.xxx 未訂閱
錯誤訊息是windows的錯誤框 標題是:Debugger Exception Notification 內文是:project project1.exe raised exception class EConverError with message"'is not a valid floating point value'.Process stopped.Use step or Run to continue. 然後C++Builder就整個當掉了... 不知道是我哪裡做錯了..Unit如下        //---------------------------------------------------------------------------    #include  #pragma hdrstop #include <math.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; double pow_test(double,double); double P1,P2; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { P1=StrToFloat(Edit1->Text); } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit2Change(TObject *Sender) { P2=StrToFloat(Edit2->Text); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double P3; if(Edit1->Text!=""&&Edit2->Text!="") { P3=pow_test(P1,P2); Edit3->Text=FloatToStrF(P3,8,8,6); } else Application->MessageBoxA("請輸入數據","WARNING",MB_OK); } double pow_test(double a,double b) { return pow(a,b); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Edit1->Text=""; Edit2->Text=""; Edit3->Text=""; } //---------------------------------------------------------------------------
imissyou
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-17 11:22:17 IP:220.141.xxx.xxx 未訂閱
試過了...不行耶QQ
RedSnow
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-17 11:25:03 IP:218.19.xxx.xxx 未訂閱
imissyou 您好:    那是因為您在清除 Edit 內容時,觸發了 OnChange 事件,而該事件中使用了 StrToFloat() 所致,您可以在使用 StrToFloat() 之前先加上檢查,若為空字串就不做 StrToFloat() 的處理即可 (就像您在 Button1Click 事件中寫的判斷式)。      7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - redsnow 於 2005/06/17 11:28:51
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-17 11:29:13 IP:218.15.xxx.xxx 未訂閱
imissyou您好: 测试您的程式,不是清空这步出错,而是
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
P1=StrToFloat(Edit1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
P2=StrToFloat(Edit2->Text); 
}    
上面两句出错,因你清空Edit1和Edit2时,有触发了Edit的onchange事件,执行strToFloat时出错,您可以将上两句写在onExit事件中即可,参考
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
 P1=StrToFloat(Edit1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Exit(TObject *Sender)
{
  P2=StrToFloat(Edit2->Text);
}
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
imissyou
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-17 12:01:29 IP:220.141.xxx.xxx 未訂閱
還是不太懂....是我太笨嗎~"~ 妳說跟Button1一樣... 可以詳述嗎? 我不知道要加什麼... 然後我把Change改成Exit 這步驟也是不行>"<
RedSnow
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-17 12:09:08 IP:218.19.xxx.xxx 未訂閱
imissyou 您好:    下列是 Edit2 的設定,其它的 Edit 可比照辦理:
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
    if (Edit2->Text != "") {
        P2 = StrToFloat(Edit2->Text); 
    }
}
7 天天敲鍵盤 v 時時按滑鼠 8
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-17 16:10:23 IP:218.15.xxx.xxx 未訂閱
引言: 然後我把Change改成Exit 這步驟也是不行>"<
您好:并不是说叫您将Change改成Exit。而是说将原来您写在Edit的onChange 事件里的内容改为写在Edit的onExit事件中。
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
P1=StrToFloat(Edit1->Text); //删除掉
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
P2=StrToFloat(Edit2->Text); //删除掉
}    void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
 P1=StrToFloat(Edit1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Exit(TObject *Sender)
{
  P2=StrToFloat(Edit2->Text);
}    
写在onExit事件的好处,是将焦点从Edit1移到其他组时触发事件,也即输完数字后才执行,对于onChange事件来说,比较合理。因为您写在OnChange事件中,如果您输入的是两位数的话,那它就执行两次onChange事件,只要Edit变动就执行。这样就显得没必要了,因您要的是输完之后读取所输入的内容而已,具体您可查下在线帮助。 onChange事件,您可以选中Form中的Edit1,然后查看Object Inspector的Events,找到OnExit,然后双击之后,输入上面代码即可,小弟试了没问题;另对于多个Edit需清空,你可以采用上面我给的两个方法,方便简捷。 PS:RedSnow前辈介绍的方法也是可行的,不过您参照上面两种事件的功能对比一下,自己依需选择吧。 ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
imissyou
一般會員


發表:1
回覆:4
積分:1
註冊:2005-06-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-17 21:07:33 IP:220.141.xxx.xxx 未訂閱
感謝大大們為我解答~ 現在已經沒問題嚕..3Q各位 unit: //---------------------------------------------------------------------------    #include  #pragma hdrstop #include <math.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; double pow_test(double,double); double P1,P2; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { double P3; if(Edit1->Text!=""&&Edit2->Text!="") { P1=StrToFloat(Edit1->Text); P2=StrToFloat(Edit2->Text); P3=pow_test(P1,P2); Edit3->Text=FloatToStrF(P3,ffFixed,16,8); } else Application->MessageBoxA("請輸入數據","WARNING",MB_OK); } double pow_test(double a,double b) { return pow(a,b); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Edit1->Text=""; Edit2->Text=""; Edit3->Text=""; } //---------------------------------------------------------------------------
系統時間:2024-05-10 1:45:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!