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

如何將Menu-->TreeView?如何讀取TreeView內item的值?

答題得分者是:danny
Code168
一般會員


發表:16
回覆:11
積分:5
註冊:2003-02-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-13 15:20:04 IP:202.175.xxx.xxx 未訂閱
各位老大,     雖然這好像是一個很簡單的問題,但小弟真的百絲不解!問題如下:    小弟成功將一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-14 16:32:16 IP:218.187.xxx.xxx 未訂閱
引言: 我真的百絲不解,為什麼第一次可以,但第二次就會有問題呢?於是我做了多次的實驗練習, 我開了一個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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-15 17:21:53 IP:202.175.xxx.xxx 未訂閱
你好Danny老大, 多謝老大的回應,但小弟讀取的Menu是MainForm的,這樣都會影響嗎?我猜最主要原因可能是我不太懂TreeView的結構及屬性,老大能不能給我一個演示呢?在下萬二分感激!
Code168
一般會員


發表:16
回覆:11
積分:5
註冊:2003-02-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-15 21:27:17 IP:202.175.xxx.xxx 未訂閱
Danny老大, 多謝你的提醒,小弟根據你的提點, 把注意力集中在FormStyle上,只要將Formstyle改變為fsNormal或fsMDIChild問題不再出現,在此再次多謝Danny老大!
系統時間:2024-05-08 4:26:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!