tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 今、仕様を少し変更しました。
投稿日: 2009/05/19(Tue) 10:00
投稿者魔界の仮面弁士
>>> データが消えるかどうかは未確認ですが、
>> 「データ」が何を指しているのか分かりませんが、
> PDFやエクセルなどの事です。
> でも、それぞれのデータはツリービューにノードとして追加するのではなく、グリッドビューの方で表示するつもりです。
今は、TreeView の話をしているのですよね。
発言内容からでは、TreeView と PDF/Excel との関係が見えてきません。

今までの一連の投稿の中に、PDFファイルやExcelファイルを参照しているという話は
一度も出ていませんので、唐突に「データ」とだけ言われても、話に付いていけません。

もし、それらファイルの話が今後の質問の上で重要な部分であるのであれば、
情報を小出しにすることはせず、その仕様を明らかにしてください。

逆に、ファイルの話と TreeView の質問との間に関連性が薄いのであれば、
話の流れをややこしくしてしまうだけなので、その話は横に置いておいてください。


>> ノードを別の位置に移動させる場合には、一度Remove してから、
>> 別の場所に Add/Insert すれば OK です。DB は関係ないかと。
> それは属性&日時取得で追加したノードでなければOKかもしれません。
属性…ですか。それは、ファイルの 読取専用/アーカイブ/非可視/システム/圧縮属性の事ですか?
「OK『かも』しれない」、という表現も気になりますが…。

何にせよ、そのノードに記載される情報がどこから得た物であるにしろ、
ノードは常に移動可能であり、「ノードの位置を変更する」という作業とは無関係かと。
(これは、アプリの仕様として移動させたくない、という話とは別の意味です)


> しかし、コンボボックスに入力したName+日時取得("hhnnss")をノード名「入力_日時取得」として追加したり、DBに登録している属性をノード名として追加したりする手もあるので、その辺は不明です。
コンボボックスというのは、No8971 に出てきていた
>>>> そのXXX1を指定(選択するのではなく固定プログラム)して、新たなノードを追加する。
>>>> コンボボックスに入力し[ノード追加]ボタンクリックすると、XXX1を指定してその下層に加える。
の事なのですよね。何度か読み返してみたのですが、アプリの仕様をまだ読み取れません。


読み合わせると、XXX1 のノード名が「入力_日時取得」であるという表現であるように
見えましたが、まず、この部分の意味が不明瞭であると感じました。

光さんが現在作成している画面、および、その仕様を知らない第三者にも分かるよう、
話の筋道を立てて、もう少し噛み砕いて説明して頂けないでしょうか。

なお、今までに挙げられた情報から、私は下記のように認識しています。

・『ノード名』というからには、(TreeNode.Text の事ではなく)TreeNode.Name の事を
 指しているものであると連想すれば良いのかな?
・そして XXX1 がそのノード名だと思っていたのだけれども、No8977 の発言内容に
 照らし合わせると、どうもこれはノードを表す変数名を指しているらしい。
・ノード名は、「入力_日時取得」という表現になっているらしい。ただしこれが、
 「"入力_日時取得" という固定文字列」を表しているのか、それとも
 「日付を元に生成される文字列」なのかといった点は読み取れない。

そして、そこから紡ぎ出したのが下記ですが…意図の見えないコードになってしまいました。

Private XXX1 As TreeNode
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim nodeName As String = "入力_日時取得"    'この部分が不明瞭
    Dim nodeText As String = "XXX1"             '画面に表示されるテキスト?
    XXX1 = TreeView1.Nodes.Add(nodeName, nodeText)
End Sub

なお、その前の発言にあった
>>>> そのXXX1を指定(選択するのではなく固定プログラム)して、新たなノードを追加する。
>>>> コンボボックスに入力し[ノード追加]ボタンクリックすると、XXX1を指定してその下層に加える。
の部分は、下記のコードを連想しています。

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    If ComboBox1.Text.Length = 0 Then
        MessageBox.Show("コンボボックスに入力されていません。")
        Return
    End If
    Dim parentNode As TreeNode = TreeView1.SelectedNode
    Dim nodes As TreeNodeCollection
    If parentNode Is Nothing Then
        nodes = TreeView1.Nodes
    Else
        nodes = parentNode.Nodes
    End If
    nodes.Add(ComboBox1.Text).EnsureVisible()   'nodes.Insert の方が良い?
End Sub


> だから、ノード名をキープしながら移動したいので、DBは関係あると思いますが、
ノード名をキープしながら移動、という部分が良く分かりませんが、
たとえば No.8978 の図で言えば、Node11 の位置を Node10 の前に持っていきたいなら
 Node10 = TreeView1.Nodes(0).Nodes(0).Nodes(0)
 Node11 = TreeView1.Nodes(0).Nodes(0).Nodes(1)
という状態において、
 Node11.Remove()
 Node10.Parent.Nodes.Insert(Node10.Index, Node11)
と記述する事ができます。位置は変わっても、変数名/ノード名/表示名は変化しません。


> 特に日時取得は毎回ランダムに変わるため、
日時取得、というのがどういう作業を指しているのか説明されていないようですが、
たとえば、ファイルの更新日を取得する場合や、PC のシステム日付を取得する場合、
その値はランダムではあるとは言えません。ランダムであるという事は、
法則性が無いという意味になってしまいますが、本当にそうなのですか?


> 移動する時は大変ですよ?いちいちソースを書き換えなければならないし。
> だから、その事を踏まえた作成を考えているのです。
DB があれば、ソースを書き換えずに済むと考えておられる事はわかりましたが、
その根拠が全く示されていないように見えたので、判断に困っているところです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。