全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1932
推到 Plurk!
推到 Facebook!

有關 RadioGroup 如何存值較好??

答題得分者是:00156
小蚊子
中階會員


發表:55
回覆:267
積分:94
註冊:2002-06-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-24 18:23:35 IP:211.78.xxx.xxx 未訂閱
    情況如下     用 RadioGroup 當選項,下次程式啟動時,可能原來的點選值會不見    我是用 另一個 edit 來存值,透過 OnClick 事件達到 "連動" 的效果    存檔就用 edit.text 的內容值, 下此開啟程式時,會再把 edit 的值,    反向指定給 RadioGroup.itemindex.,等程式開發完成後   再把所有的 edit.text 全部 Visible = false (與 RadioGroup 有關的那幾個)   畫面就會美美的.    我遇到的問題是 1.  以上過程是為了要存值,所以借用 edit.text ,不知我的方法對嗎?      一般的大眾式如此用法嗎??   個人感覺好像多此一舉    2.  
 
     procedure TForm1.RadioGroup1Click(Sender: TObject);
      begin
         edit1.Text := inttostr(RadioGroup1.
      end;
當我在輸入 RadioGroup1. 時,一般會出現很多 ProPerty 可以選用 可是有時出現 如圖2,只有一個選項,但程式 run 過一次後,又可以出現 三個選項 如圖3, 但是若是新的 RadioGroup3 第一次都只能出現 如圖2 的單一選項,根本無 itemindex 可以點選,有點奇怪??? 3. 另外一個問題是 若 RadioGroup1 及 edit1 的類似組合很多,難道要寫很多的 OnClick 事件嗎? 是否有夠簡潔的方式??
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-24 18:45:31 IP:61.56.xxx.xxx 未訂閱
  • 在IDE裡Code Completion的功能(妳提到的Property),可以依據目前的資料形態來顯示,所以圖二裡面只有含有string形態的物件會出現;圖三裡含有integer的物件會出現。
  • 妳的方法當然可行。不過,可以考慮使用TStrings/TStringList來儲存
  • 將所有RadioGroup的結果存入TStrings裡,來取代TEdit,就可以將所有onClick事件指向同一個方法了。取出時,可以考慮用TString.Values[標題名稱]來處理。
加油囉!
00156
高階會員


發表:45
回覆:195
積分:112
註冊:2002-06-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-24 18:46:09 IP:61.56.xxx.xxx 未訂閱
試試下面的程式碼吧(我只放了RadioGroup1及RadioGroup2兩個,並設定OnCreate及OnClose兩個事件)
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;    type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    procedure SaveToFile(AFileName:TFileName);
    procedure LoadFromFile(AFileName:TFileName);
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}
procedure TForm1.SaveToFile(AFileName:TFileName);
var ss:TStrings;
begin
  ss:=TStringList.Create;
  try
    ss.Add('地點=' IntToStr(RadioGroup1.ItemIndex));
    ss.Add('住宿=' IntToStr(RadioGroup2.ItemIndex));
    //...繼續Add所有的RadioGroup
    ss.SaveToFile(AFileName);
  finally
    ss.Free;
  end;
end;
procedure TForm1.LoadFromFile(AFileName:TFileName);
var ss:TStrings;
    i,j,k:integer;
begin
  ss:=TStringList.Create;
  try
    ss.LoadFromFile(AFileName);
    for i:=0 to ss.Count-1 do
      for j:=0 to self.ComponentCount-1 do
        begin
          if Components[j].ClassName='TRadioGroup' then
            begin
              k:=StrToIntDef(ss.Values[(Components[j] as TRadioGroup).Caption],-1);
              (Components[j] as TRadioGroup).ItemIndex:=k;
            end;
        end;
  finally
    ss.Free;
  end;
end;    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  self.SaveToFile('test.txt');
end;    procedure TForm1.FormCreate(Sender: TObject);
begin
  self.LoadFromFile('test.txt');
end;    end.
發表人 - 00156 於 2005/01/24 21:21:23
小蚊子
中階會員


發表:55
回覆:267
積分:94
註冊:2002-06-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-24 22:19:29 IP:211.78.xxx.xxx 未訂閱
引言: 試試下面的程式碼吧(我只放了RadioGroup1及RadioGroup2兩個,並設定OnCreate及OnClose兩個事件) 發表人 - 00156 於 2005/01/24 21:21:23 ...................
感覺您的寫法很有技巧,我無法想到如此的做法 但我還是參考參考,畢竟我還有很多要學 謝謝您
系統時間:2024-05-01 11:46:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!