如何將Menu-->TreeView?如何讀取TreeView內item的值? |
答題得分者是:danny
|
Code168
一般會員 發表:16 回覆:11 積分:5 註冊:2003-02-11 發送簡訊給我 |
各位老大,
雖然這好像是一個很簡單的問題,但小弟真的百絲不解!問題如下: 小弟成功將一個MainMenu轉為TreeView,但當第二次讀取TreeView內的item有關值或第二次將有關值賦予Item時,都會出現如下錯誤:
Project1 raised exception class ETreeViewError with 'Invalid Index'. 創建TreeView程序如下:
procedure CreatTree(); Var MenuCount,SubMenuCount,I,J:Integer; Var Str12,Str34,StrMenu,StrSubMenu:String; Var TopNode,RootNode,SubNode:TTreeNode; Var StatusValue:boolean; Var ImageNum1,ImageNum2:integer; begin UserManagement.FrmUserMana.MenuTree.Items.Clear; MenuCount:=Main.FrmLaundry.MMLaundry.Items.Count; TopNode:=UserManagement.FrmUserMana.MenuTree.Items.Add(nil,'Laundry Stock Management'); TopNode.SelectedIndex:=0; TopNode.ImageIndex:=50; For I:=0 to MenuCount-1 do begin Str12:=GiveZero(I); StrMenu:=Str12 '---' Main.FrmLaundry.MMLaundry.Items[I].Caption; ImageNum1:=Main.FrmLaundry.MMLaundry.Items[I].ImageIndex; RootNode:=UserManagement.FrmUserMana.MenuTree.Items.AddChild(TopNode,StrMenu); RootNode.SelectedIndex:=I; RootNode.ImageIndex:=ImageNum1; SubMenuCount:=Main.FrmLaundry.MMLaundry.Items[I].count; For J:=0 to SubMenuCount-1 do begin Str34:=GiveZero(J); StrSubMenu:=Str12 Str34 '---' Main.FrmLaundry.MMLaundry.Items[I].Items[J].Caption; ImageNum2:=Main.FrmLaundry.MMLaundry.Items[I].Items[J].ImageIndex; SubNode:=UserManagement.FrmUserMana.MenuTree.Items.AddChild(RootNode,StrSubMenu); SubNode.SelectedIndex:=J; SubNode.ImageIndex:=ImageNum2; end; end; TopNode.Expanded:=True; end;賦值給TreeView's Item 程序; Procedure SetTreeValue1(Str1:String); Var RootNode,SubNode:TTreeNode; Var I,J,K,M:Integer; Var TempStr:String; begin RootNode:=UserManagement.FrmUserMana.MenuTree.Items[0]; If RootNode.HasChildren then I:=RootNode.Count; For J:=0 to I-1 do begin SubNode:=RootNode.Item[J]; If SubNode.HasChildren then K:=SubNode.Count; For M:=0 to K-1 do begin TempStr:=Leftstr(SubNode.Item[M].Text,4); With DataAccess.Connection1 do begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select *'); ADOQuery1.SQL.Add('From Laundry_Premission'); AdOQuery1.SQL.Add('Where (Name=:Name) and (RecordNo=:RecordNo)'); ADOQuery1.Parameters.ParamByName('Name').Value:=Str1; ADOQuery1.Parameters.ParamByName('RecordNO').Value:=TempStr; ADOQuery1.Open; ADOQuery1.First; If Not ADOQuery1.IsEmpty then begin If ADOQuery1.FieldByName('Enabled').AsBoolean=1 then SubNode.Item[M].StateIndex:=2 Else End; SubNode.Item[M].StateIndex:=1; end Else SubNode.Item[M].StateIndex:=1; end; end; end; end;我真的百絲不解,為什麼第一次可以,但第二次就會有問題呢?於是我做了多次的實驗練習, 我開了一個new project, 用以上方法創建TreeView, 另外用差不多的方法去取值或賦值, 結果沒有發現相同問題...為什麼呢? 我比較了一下...兩者不同的只有是否連接數據庫及FormStyle不同, 出問題的FormStyle是由原來的Normal變為MDIChild,實驗中的FormStyle是Normal,我想了很久都不明白. 是否我對TreeView的結構理解錯誤,還是其他問題呢?希望各位老大指導一下!謝謝! 發表人 - Code168 於 2003/03/15 17:10:05 |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 我真的百絲不解,為什麼第一次可以,但第二次就會有問題呢?於是我做了多次的實驗練習, 我開了一個new project, 用以上方法創建TreeView, 另外用差不多的方法去取值或賦值, 結果沒有發現相同問題...為什麼呢? 我比較了一下...兩者不同的只有是否連接數據庫及FormStyle不同, 出問題的FormStyle是由原來的Normal變為MDIChild,實驗中的FormStyle是Normal,我想了很久都不明白. 是否我對TreeView的結構理解錯誤,還是其他問題呢?希望各位老大指導一下!謝謝!MDIChild 是 MDI 的子 Form, 本身並沒有 Menu (只有 MainForm 才有), 您可以對 MainForm 的 Menu 處理應該就可以了... 另外請將您的 Code 前後加上〔code〕〔/code〕這樣能正常縮排, 不然您的程式很難看懂 ... 發表人 - danny 於 2003/03/14 16:35:48
------
將問題盡快結案也是一種禮貌! |
Code168
一般會員 發表:16 回覆:11 積分:5 註冊:2003-02-11 發送簡訊給我 |
|
Code168
一般會員 發表:16 回覆:11 積分:5 註冊:2003-02-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |