C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#でツリービューを使用するには


(過去ログ 104 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■62420 / inTopicNo.1)  C#でツリービューを使用するには
  
□投稿者/ ネネイ (1回)-(2011/10/08(Sat) 15:53:06)

分類:[C#] 

C#を勉強中の初心者なのですが、
ツリービューのコードについて、
Aceess2000VBAからvs2005のC#に移植させたいのですが、
行き詰っています。どなたかご指導して頂けないでしょうか?

C#の21行目〜31行目等をどうやったらいいのか悪戦苦闘しております。
宜しくお願い致します。



【Access】

01  Dim nodRoot As Node
02  Dim objTree As TreeView
03
04  Set objTree = Me.objTreeView.Object
05 
06  Me![objTreeView].Nodes.Clear
07  
08     Set nodRoot = objTree.Nodes.Add(, , "root", "情報", 4, 3)
09     
10     Do Until mrs.EOF
11      If mrs!ki_parentid <> -1 Then
12        If "A00" = "A" & mrs!ki_parentid & mrs!KI_Children Then
13           Set nodRoot = objTree.Nodes.Add("root", tvwChild, "A" & mrs!KI_Id, mrs!KI_Name, 1, 2)
14        Else
15           If mrs![KI_Children] = 0 Then
16              Set nodRoot = objTree.Nodes.Add("A" & mrs!ki_parentid, tvwChild, "A" & mrs!KI_Id, mrs!KI_Name, 1, 2)
17           Else
18              Set nodRoot = objTree.Nodes.Add("A" & mrs!ki_parentid, tvwChild, "A" & mrs!KI_Id, mrs!KI_Name, 5, 2)
19           End If
20        End If
21       End If
22      mrs.MoveNext
23      Loop
24     mrs.Close
25
26  objTree.Nodes(1).Expanded = True


【C#】

01     int ParentId, Children;
02     string SE = "";
03
04     TreeNode 情報 = new TreeNode("情報");
05     treeView1.Nodes.Add(情報);
06
07     for (int i = 0; i <= Koji.Tables[0].Rows.Count-1 ; i++)
08         {
09             if ((int)Koji.Tables[0].Rows[i]["KI_ParentId"] != -1)
10             {
11                  ParentId = (int)Koji.Tables[0].Rows[i]["KI_ParentId"];
12                  Children = (int)Koji.Tables[0].Rows[i]["KI_Children"];
13
14                  if (ParentId == 0 && Children == 0)
15                  {
16                      ///子ノード
17                      SE = (string)Koji.Tables[0].Rows[i]["KI_Name"];
18                      TreeNode ko = new TreeNode(SE);
19                      情報.Nodes.Add(ko);
20                  }
21                  else
22                  { 
23                      ///孫ノード
24                      if (Children == 0)
25                      {
26                            
27                       }
28                       else
29                       {
30                           
31                       }
32                        
33                   }
34
35             }
36         }

引用返信 編集キー/
■62422 / inTopicNo.2)  Re[1]: C#でツリービューを使用するには
□投稿者/ shu (1035回)-(2011/10/08(Sat) 17:00:53)
No62420 (ネネイ さん) に返信

Dictionary<int,TreeNode>でTreeNodeとIDとの関係を保存すると処理しやすいです。
dicとすると

> 18 TreeNode ko = new TreeNode(SE);
> 19 情報.Nodes.Add(ko);
このあとに
dic.Add(<このときのID(がありますよね?)>, ko)
として
21のとき
pnd = dic(ParentId)
とすれば親となるべきNodeが取得できるので
pnd.Add(〜)
とすれば出来ると思います。

引用返信 編集キー/
■62423 / inTopicNo.3)  Re[2]: C#でツリービューを使用するには
□投稿者/ ネネイ (2回)-(2011/10/08(Sat) 22:44:33)
2011/10/08(Sat) 22:53:18 編集(投稿者)
shuさん回答ありがとうございました。
私は頭が悪く、shuさんの言っている事があまり、
理解出来ていないようで、エラーが出てしまいました。

もう少し、ご教授頂けば幸いです。


★の部分を追加した所、 26行目でエラーが出ているようです。

×1名前pndは現在のコンテキスト内に存在しません。
×2dicは変数ですが、メソッドのように使用されています。


01    int ParentId, Children;
02    string SE = "";
03
04    Dictionary<int, TreeNode> dic = new Dictionary<int, TreeNode>(); ///★追加
05    ///親ノード
06    TreeNode 情報 = new TreeNode("情報");
07    treeView1.Nodes.Add(情報);
08
09    for (int i = 0; i <= Koji.Tables[0].Rows.Count-1 ; i++)
10    {
11         if ((int)Koji.Tables[0].Rows[i]["KI_ParentId"] != -1)
12         {
13              ParentId = (int)Koji.Tables[0].Rows[i]["KI_ParentId"];
14              Children = (int)Koji.Tables[0].Rows[i]["KI_Children"];
15
16              if (ParentId == 0 && Children == 0)
17              {
18                   ///子ノード
19                   SE = (string)Koji.Tables[0].Rows[i]["KI_Name"];
20                   TreeNode ko = new TreeNode(SE);
21                   情報.Nodes.Add(ko);
22                   dic.Add(((int)Koji.Tables[0].Rows[i]["KI_ID"]), ko); ///★追加 
23              }
24              else
25              {
26                   pnd = dic(ParentId) ;             ///★ここでエラー
27
28                   ///孫ノード
29                   if (Children == 0)
30                   {
31                       
32                   }
33                   else
34                   {
35                        
36                   }
37
38              }
39         }
40    }   

引用返信 編集キー/
■62424 / inTopicNo.4)  Re[3]: C#でツリービューを使用するには
□投稿者/ shu (1036回)-(2011/10/09(Sun) 00:23:56)
No62423 (ネネイ さん) に返信

> ★の部分を追加した所、 26行目でエラーが出ているようです。
>
> ×1名前pndは現在のコンテキスト内に存在しません。
> ×2dicは変数ですが、メソッドのように使用されています。

pnd はTreeNode型の変数として定義してください。
2のエラーはdic(ParentId)でなくdic[ParentId]に訂正してください。VBの癖で間違えて
記述していました。
引用返信 編集キー/
■62425 / inTopicNo.5)  Re[3]: C#でツリービューを使用するには
□投稿者/ Azulean (854回)-(2011/10/09(Sun) 00:41:29)
2011/10/09(Sun) 00:43:10 編集(投稿者)

No62423 (ネネイ さん) に返信
> 私は頭が悪く、shuさんの言っている事があまり、
> 理解出来ていないようで、エラーが出てしまいました。

頭が悪いということではなく、単に勉強不足なだけに見えました。
(あるいは推測する力?)

元のコードは読み解けていますか?
勉強中の C# において、教えてもらったキーワードについて自分で使い方を調べてみましたか?


> ★の部分を追加した所、 26行目でエラーが出ているようです。
>
> ×1名前pndは現在のコンテキスト内に存在しません。
> ×2dicは変数ですが、メソッドのように使用されています。

エラーを見て、何か感じるところはなかったのでしょうか?
丸投げするのではなく、原因の推測など、自己解決の努力も期待したいところです。
親切な方であればフォローしていただけますが、質問者にとっては一時しのぎになると思っています。

勉強した結果、何に生かすか次第ですが、業務として取り組まれているのであれば、時間を十分にとり、努力する姿勢に切り換えていかないと厳しいように感じられます。
趣味なら、時間がかかっても大丈夫な面もあるかもしれませんが。
引用返信 編集キー/
■62431 / inTopicNo.6)  Re[4]: C#でツリービューを使用するには
□投稿者/ ネネイ (3回)-(2011/10/09(Sun) 16:04:40)
shuさん、度々回答ありがとうございました。
無事、下記のような感じでAccessと同等な処理をする事が出来ました。
あとは、イメージのアイコン等をつけるだけです。

Azuleanさん、レスありがとうございます。
質問の仕方等を考慮します。失礼しました。
C#を勉強中で、趣味的なものが強いです。
まだ、移植が始まったばかりですので、またご質問等させていただきます。

宜しくお願いします。<(_ _)>

            int ParentId, Children;
            string SE = "";
            Dictionary<int, TreeNode> dic = new Dictionary<int, TreeNode>();
            TreeNode pnd;
            ///親ノード
            TreeNode 情報 = new TreeNode("情報");
            
            treeView1.Nodes.Add(情報);

            for (int i = 0; i <= Koji.Tables[0].Rows.Count-1 ; i++)
            {
                  if ((int)Koji.Tables[0].Rows[i]["KI_ParentId"] != -1)
                  {
                        ParentId = (int)Koji.Tables[0].Rows[i]["KI_ParentId"];
                        Children = (int)Koji.Tables[0].Rows[i]["KI_Children"];

                        if (ParentId == 0 && Children == 0)
                        {
                            ///子ノード
                            SE = (string)Koji.Tables[0].Rows[i]["KI_Name"];
                            TreeNode ko = new TreeNode(SE);
                            情報.Nodes.Add(ko);
                            dic.Add(((int)Koji.Tables[0].Rows[i]["KI_ID"]), ko);
                        }
                        else
                        {
                            pnd = dic[ParentId];
                            ///孫ノード
                           if (Children == 0)
                           {
                               SE = (string)Koji.Tables[0].Rows[i]["KI_Name"];
                               TreeNode Mago = new TreeNode(SE);
                               pnd.Nodes.Add(Mago);
                           }
                           else
                           {
                               SE = (string)Koji.Tables[0].Rows[i]["KI_Name"];
                               TreeNode Mago = new TreeNode(SE);
                               pnd.Nodes.Add(Mago);
                           }

                        }
                  }
            }

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -