列舉型態使用上的問題 |
尚未結案
|
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type THRProcesses=(add_emp,change_emp,delete_emp); TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var aWord:string; myProc:THRProcesses; begin aWord:='change_emp'; if aword in myProc then ShowMessage(aWord 'in HRProc') else ShowMessage(aWord 'not in HRProc'); end; end.如果我想知道change_emp是否在我的列舉型態中,可是delphi complier卻說我「Operator not applicable to this operand type」,我到底哪裡寫錯了呢? |
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
|
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
To 深藍的魚,祝您好運..........連連
我按照該超鏈結的方式,還是不行,compiler出現:
「'(' expected but 'THEN' found 」
程式碼如下:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,Typinfo, StdCtrls; type THRProcesses=(add_emp,change_emp,delete_emp); TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var myProc:THRProcesses; aWord:string; begin aWord:='delete_emp'; myProc:=THRProcesses(GetEnumValue(TypeInfo(THRProcesses),aWord)); if myProc in THRProcesses then ShowMessage('found') else ShowMessage('not found'); end; end. 引言: 與下列連結類似的問題,請參考一下! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=59563 _______________________________________ 深藍的魚,祝您好運..........連連 |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
你對列舉的觀念根本不對
第一.
列舉是值
不是集合
直有集合可以用 in
既然是值,當然要用對 operator
if myProc = add_emp then <------ 要這樣用
第二.
你的程式邏輯很糟
procedure TForm1.Button1Click(Sender: TObject); var myProc:THRProcesses; aWord:string; begin aWord:='delete_emp'; myProc:=THRProcesses(GetEnumValue(TypeInfo(THRProcesses),aWord)); if myProc in THRProcesses then ShowMessage('found') else ShowMessage('not found'); end;這是什麼? 這樣的寫法一點意義都沒有 就算 if myProc in THRProcesses then 這個錯誤修正了,也沒有意義,因為你先設定 myProc 為 delete_emp 然後呢?要比較什麼? 答案不是永遠 found ,就會變成永遠 not found 這樣的程式 non-sense 不知道你到底要做什麼 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
插個花!
要的是這樣的效果吧!
procedure TForm1.Button1Click(Sender: TObject); var I :Integer; myProc :THRProcesses; aWord :string; begin aWord:='delete_emp'; I := GetEnumValue(TypeInfo(THRProcesses),aWord)); if I>-1 then begin myProc:=THRProcesses(I); ShowMessage('found'); ..... end else ShowMessage('not found'); end;誠如 syntax 所言。 in 語法必須用於 集合。也就是判斷該集合中是否存在成員。 若要使用大概是這樣定義 THRProcesse = (add_emp,change_emp,delete_emp); THRProcessess = Set of THRProcesse;定義為THRProcesse複數。 例如 var A :THRProcesse; B :THRProcesses; begin A := add_emp; B := [add_emp,change_emp]; if A in B then Showmessage('集合中有 A!'); //或者 if add_emp in B then Showmessage('在集合中有這個成員!'); end; 以上參考參考! 發表人 - wameng 於 2005/04/06 00:23:03 |
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
對!就是要這個。我是想檢查delete_emp是否存在THRProcesses這個集合內。
我想,如果把問題再延伸下去,不曉得delphi 7 能否達到。
如果我有一XML 定義如下
<dataflow scr="A" dest="A1"/> <dataflow scr="A" dest="A2"/> <dataflow scr="A" dest="B1"/> <dataflow scr="B" dest="A1"/> <dataflow scr="B" dest="A2"/> <dataflow scr="B" dest="B2"/>能否將抓出 1.source為A的dest屬性,在程式中指定給某一A個集合 與 抓出source為B的dest屬性,在程式中指定給某一個B集合 2.然後比較這兩個集合所包含的元素是否有差異? 如果1.可以做到的話,關於2. delphi 7 有無提供類似操作集合的方法 如compare(setA ,setB)或 add(setA,'aElement')等等 引言: 插個花! 要的是這樣的效果吧!<<<>procedure TForm1.Button1Click(Sender: TObject); var I :Integer; myProc :THRProcesses; aWord :string; begin aWord:='delete_emp'; I := GetEnumValue(TypeInfo(THRProcesses),aWord)); if I>-1 then begin myProc:=THRProcesses(I); ShowMessage('found'); ..... end else ShowMessage('not found'); end;誠如 syntax 所言。 in 語法必須用於 集合。也就是判斷該集合中是否存在成員。 若要使用大概是這樣定義 THRProcesse = (add_emp,change_emp,delete_emp); THRProcessess = Set of THRProcesse;定義為THRProcesse複數。 例如 var A :THRProcesse; B :THRProcesses; begin A := add_emp; B := [add_emp,change_emp]; if A in B then Showmessage('集合中有 A!'); //或者 if add_emp in B then Showmessage('在集合中有這個成員!'); end; 以上參考參考! 發表人 - wameng 於 2005/04/06 00:23:03 |
aAlan
一般會員 發表:38 回覆:24 積分:12 註冊:2004-07-23 發送簡訊給我 |
Hello Mr. "S":
謝謝指教了....
如樓上所說的,有一延伸的問題。不曉得以您對列舉型態的認識,
能否對列舉型態做元素動態assign的動作呢? 您的批評與指教,我的虛心接受.........多謝
引言: 你對列舉的觀念根本不對 第一. 列舉是值 不是集合 直有集合可以用 in 既然是值,當然要用對 operator if myProc = add_emp then <------ 要這樣用 第二. 你的程式邏輯很糟procedure TForm1.Button1Click(Sender: TObject); var myProc:THRProcesses; aWord:string; begin aWord:='delete_emp'; myProc:=THRProcesses(GetEnumValue(TypeInfo(THRProcesses),aWord)); if myProc in THRProcesses then ShowMessage('found') else ShowMessage('not found'); end;這是什麼? 這樣的寫法一點意義都沒有 就算 if myProc in THRProcesses then 這個錯誤修正了,也沒有意義,因為你先設定 myProc 為 delete_emp 然後呢?要比較什麼? 答案不是永遠 found ,就會變成永遠 not found 這樣的程式 non-sense 不知道你到底要做什麼 |
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |