タイトル : 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 があれば、ソースを書き換えずに済むと考えておられる事はわかりましたが、 その根拠が全く示されていないように見えたので、判断に困っているところです。 |