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

自訂元件動態設定欄位寬度問題?

缺席
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-05 14:03:43 IP:220.134.xxx.xxx 訂閱
版大及各為前輩:
我欲在自訂元件內,透過元件的datasource取得欄位長度,然後換算成適當的textbox寬度,雖然已經達到功能
但是卻會出現錯誤訊息,不知道我的程式碼哪邊有錯,可否請前輩們,給予提示! 謝謝!
function YaoEdit.Get_DataField: string;
begin
Result := UTEdit.DataField; ;
end;
procedure YaoEdit.Set_DataField(aField: string);
var
i: Integer;
current_Field: Integer;

begin
if UTEdit.DataField <> aField then
begin
UTEdit.DataField := aField;
// 當使用者一設定資料庫的來源,我們就動態改變標題
if UTEdit.DataField <> '' then
begin
for i := 0 to Self.Datasource.DataSet.Fields.Count - 1 do
begin
if Self.Datasource.DataSet.Fields.Fields[i].FieldName = aField then
begin
current_Field := i;
end;

end;
// 假如標題欄位還沒設定文字,我們才幫他捉取資料來源當標題,簡化設定程序
// 若有標題設定,但是沒有設定快捷按鍵,一樣跟隨欄位變更標題
if ((Trim(Get_Title_Label) = '') or (InStr(1, '&', Get_Title_Label) = 0)) then
begin
Set_Title_Label(UTEdit.DataField);
// 假如標題欄位的長度=0 我們才進行調整欄位寬度
if Get_Title_Label_Width = 0 then
begin
Set_Title_Label_Width(85);
end;
end;

// 自動設定欄位寬度
self.UTEdit.Width := 10 * (Self.Datasource.DataSet.Fields[current_Field].Size);
end;
TControl_arrangement;
end;
end;
加上紅色字體的部份會產生錯誤,若刪除則無錯誤訊息!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-06 04:39:50 IP:220.134.xxx.xxx 訂閱
解決了!不過蠻有成就感的!  VCL   不知道要怎麼簡易Debug! 是否有前輩可以提示一下!
我發現上述的程式碼有一個關鍵錯誤就是,因為要設定EDIT的Field時,需要確定先有DataSource,但由於
比如我在表單上,將物件作複製的行為時,DataSource可能為nil,導致出現錯誤訊息!
所以只要加上
if (Self.Datasource <> nil) then
begin
原程式碼
end;
果然要小心啊!

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
系統時間:2024-05-14 4:12:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!