VBのカスタムコントロールはほとんどさわったことがないので、ぜんぜんわからないです。
初心者っぽい質問で申し訳ないのですが、プロセスとプロセスがもっているスレッドを、プロセスID&スレッドIDをキーにツリー構造を持たせたいのですが、ツリービューのツリーへのアクセスのしかたがわかりません。
MSDNライブラリが壊れているようで、ヘルプが出ないのです。
新しいMSDNライブラリ入れてから、トラブル続き。

TreeView1.Nodes.Add , , "キー", "値"
TreeView1.Nodes.Add , , "キー\サブキー", "値"

じゃなさそうみたいです。

かといってそれぞれのノードが小枝への参照をもっているわけでもないし、小枝を追加するメソッドをもっているわけでもないし。

単純に小枝への追加のしかたが知りたいだけなんですけど・・・。
だれか教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>はい、その点はわかっております。


わかってくださったようでうれしいです。

tvwChild の上にカーソルがある状態で「F1キー」を押したら、MSDNに情報が出ませんか?
僕のMSDNは「ツリー ビュー (TreeView) コントロールの定数」というのが開きました。

>インターフェースを作るのが後回しになって、結局内部だけ作って、中途半端な状態で終わっちゃう
わかります。その気持ち。。。
よく僕もあります。

僕も内部のパーツから作ります。画面なんてどうにでもなるし、パーツを作りこんでいるうちに最初リストビューにしようと思っていたことが、ツリービューの方がいいかもと思えることもあるので、画面を最初から作るはめに・・・なんてことがないようにしたいですしね。

まぁ何にせよ、がんばってください。
    • good
    • 0
この回答へのお礼

いろいろありがとうございました。

>わかります。その気持ち。。。
同じような方がいて嬉しいです。

また何かあったら、おねがいします。

お礼日時:2002/02/13 18:44

下記のプログラムを実行してみて下さい。

おおまかな組み立てかたは
分かるかと思います。

Dim nodX As Node
TreeView1.LineStyle = tvwRootLines 'ツリービューの線のスタイルの設定
Set nodX = TreeView1.Nodes.Add(, , "r", "ルート1") '最初のノード追加
'ルート1の子ノードの追加
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "child1", "子ノード1")
Set nodX = TreeView1.Nodes.Add("r", tvwChild, "child2", "子ノード2")
'ルート2と子ノードの追加
Set nodX = TreeView1.Nodes.Add(, , "r2", "ルート2")
Set nodX = TreeView1.Nodes.Add("r2", tvwChild, "child3", "子ノード")
    • good
    • 0
この回答へのお礼

だいたい理解しました。
tvwChild定数が鍵だったんですねぇ。
ありがとうございました。

お礼日時:2002/02/19 21:01

Addの文を見てください。


最初にAddしている「会社」以外はtvwChildが、引数に渡されています。
実行してみると、会社にぶら下がります。
それぞれのアイテムが、何にぶら下がっているかを注目してください。
そして各パラメータ値と対比させて見るようにしてください。


tvwChild は 宣言しないでもリストビューのコントロールが使用できるのであれば、リストビューを作成するライブラリに宣言されているので、特にプログラム内部での宣言は必要ありません。
ちなみにtvwChild = 4です。
この部分でエラーが起こるようであれば、もう一度コンポーネントを見直しましょう。

MSDNはネットにもあります。
http://www.microsoft.com/japan/developer/default …
「ツリー ビュー (TreeView) コントロールの使い方ツリー ビュー (TreeView) コントロールの使い方」
上記のカギカッコ内の文字列をキーにして、検索をしてみてください。



あのサンプル以上にわかりやすく説明することは、ちょっと無理です。。。

>新しいMSDNライブラリにはその部分が抜けているのではないか(リストにない)という結論に至った
そんなことはないと思うのですが。。。貼り付けたコントロールをクリックしアクティブ状態にして、[F1キー]を押したら、よほどマイナーなコントロールでない限り、そのコントロールのヘルプが出ます。
それはご存知ですか?

勉強方法はいろいろありますが、主にサンプルがあったときは、それをコピってプロジェクトを作成し、いろいろ改造してみることが必要です。さっきのサンプルをいろいろ改造してみましたか?


もめる気はないですが、、、
あなたの気持ちもわからないではないけど、あの書き込みからはTodoさんが言うのも最もな気がします。

>初心者っぽい質問で申し訳ないのですが、
本当は自分は初心者ではないと言っているように聞こえます。

>プロセスとプロセスがもっているスレッドを、・・・・
やっていることは、VBをする人の中で、高度なことです。それをすでにしていますね。

このことから、それまでの過程がよくわからないので、言語上級者がヘルプを調べるのが面倒になって回答を求めてるようにとることもできます。

もう一度言いますが、、、もめる気はありません。。。
しかし僕自身もプロセスやスレッドの概念を持った方であれば、あのサンプルを調査したら理解できるように思います。

とりあえず、改造を行ってみて、どういう風にわからないかを指摘してもらえれば、それなりの回答を得られると思います。
    • good
    • 0
この回答へのお礼

すみません。
tvwChildが定数だとは気が付きませんでした。
オブジェクトブラウザはかなりのぞいたんですが、定数までは気が回りませんでした。
オブジェクトブラウザでのメソッドのプロトタイプがバリアント型だったので、何型がわからなかったのです。

>高度なことです
プロセスとスレッドをクラスにしたり・・・。
自分でもコアなことやってると思ってます。
さて、知識も付いてきたことだし、そろそろ実用的なプログラムを作ろうかと思ったら、インターフェース部分の知識が極端に抜けてまして。
最近どうも、インターフェースを作るのが後回しになって、結局内部だけ作って、中途半端な状態で終わっちゃうことが多かったもんで。

>本当は自分は初心者ではないと
他のことはわかるのに、インターフェースの知識だけ欠けて、みたいな意識があって、このような不快にさせる表現を使ってしまったみたいです、すみません。

>もめる気はありません
はい、その点はわかっております。
一応努力したという意思表示のつもりです。

いろいろつきあってくださってどうもありがとうございました。

お礼日時:2002/02/12 23:48

検索を活用しましょうね。


つい最近、追加/削除のサンプルを載せました。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=213676
    • good
    • 0
この回答へのお礼

・・・いえ、これは検索して見たのですが、これは理解できませんでした。

>.Add "会社", tvwChild, "経理部", "経理部"
>.追加 "親となる物のキー", 自分は子, "キー文字列", "TreeViewに表示するテキスト"

この、"自分は子" ってのがわかりません。
tvwChildが以前にどこで宣言されているのかがわかりません。
型なども。
そのへんご指導おねがいします。

お礼日時:2002/02/12 16:14

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMSDNのコレクションがありません。MSDNを再インストールしてください。

現在VisualStudio6を使っております。
VB6を使ってエラーが発生した時に、「OK」「ヘルプ」でヘルプを押すと、
MSDNのコレクションがありません。MSDNを再インストールしてください。
のメッセージが表示されます。

以前1年間 ユニバーサルエディションという高いサービスを1年間だけ受けていたが
今は何もMSDNのサービスを受けていません。

以前送られてきたCDが沢山あるのですが、どういうタイトル(ラベル)のCDをインストールすれば
良いのでしょうか?
最新でないと意味がないと思いますが、代用で使えるものがあるのでしょうか?

Aベストアンサー

MSDNに加入されていたのでしたら、3ヶ月に1度「MSDN Library」と書かれた
CD-ROM(大体2~3枚組)が送られて来ていたと思いますので、
その中からいずれかをインストールするといいでしょう。

ただVBの場合、6.0と.NETとでは別物と言っていいほど大きな違いがありますので、
必ずしも最新版がベストであるとは言い切れません。
もしVB6.0をパッケージで購入されたのでしたら、それに付属している物を
インストールした方がいいかもしれません。

また、MSDNライブラリはWeb上でも見る事ができます。
http://www.microsoft.com/japan/msdn/library/

MSDNライブラリの使い方については以下のページにわかりやすい解説があります。
http://homepage1.nifty.com/rucio/main/dotnet/nyumon/BEGIN8.htm

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む

QMSDNをインストールしたい

こんにちわ。
VBをインストールし終って、MSDNもインストールしようと思ったのですが、CDを入れても反応せず、中身を見ると「MSDN」というフォルダと「MSDN332.INF」しかありません。どうやってインストールするのでしょうか?

Aベストアンサー

それは、Disc2です。
Disc1からインストールしてください。

QTreeViewに重複する値をセット

VB2005Expressで開発しています。

TreeViewにデータテーブルの値をセットして表示しています。
セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。左図のようにしたいのですが、右図のようになってしまいます。
あ あ
|-い |-い
| | | |
| -う | -う
お | -え
|-い お
| |
| -え
ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方が
いらっしゃいましたら教えて下さい。下記がPGMです。

'処理内容:TreeViewにデータテーブルの値をセット
Private Function fncTreeViewSet() As Boolean
Dim dTbl As DataTable
Dim Node As TreeNode
Dim intMenuNo As Integer
Dim strMenuName1 As String
Dim strMenuName2 As String
Dim strMenuName3 As String
Dim strMenuName4 As String
Dim strMenuName5 As String
Dim i As Integer

Node = TreeView1.SelectedNode
dTbl = dsDataSet.Tables("Mメニュー")

For i = 0 To dTbl.Rows.Count() - 1
intMenuNo = 0
strMenuName1 = ""
strMenuName2 = ""
strMenuName3 = ""
strMenuName4 = ""
strMenuName5 = ""

strMenuName1 = Trim$(dTbl.Rows(i)("階層1"))
intMenuNo = dTbl.Rows(i)("工程番号")
strMenuName2 = Trim$(dTbl.Rows(i)("階層2").ToString)
strMenuName3 = Trim$(dTbl.Rows(i)("階層3").ToString)
strMenuName4 = Trim$(dTbl.Rows(i)("階層4").ToString)
strMenuName5 = Trim$(dTbl.Rows(i)("階層5").ToString)

If strMenuName1 = "" Then
Else
If strMenuName2 = "" Then
TreeView1.Nodes.Add(strMenuName1) '階層1をセット
Else
If strMenuName3 = "" Then
fncSerchNode(strMenuName1)
TreeView1.SelectedNode.Nodes.Add(strMenuName2) '階層2をセット
Else
If strMenuName4 = "" Then
fncSerchNode(strMenuName2)
TreeView1.SelectedNode.Nodes.Add(strMenuName3) '階層3をセット
Else
If strMenuName5 = "" Then
fncSerchNode(strMenuName3)
TreeView1.SelectedNode.Nodes.Add(strMenuName4) '階層4をセット
Else
fncSerchNode(strMenuName4)
TreeView1.SelectedNode.Nodes.Add(strMenuName5)
End If
End If
End If
End If
End If
Next

TreeView1.SelectedNode = Nothing
End Function


'処理内容:指定ノード選択
Private Function fncSerchNode(ByVal strMenuName As String) As Boolean
Dim Node As TreeNode

For Each Node In fncGetAllNodes(TreeView1.Nodes)
If Node.Text = strMenuName Then
TreeView1.SelectedNode = Node
Exit For
End If
Next
End Function


'処理内容:子ノードも含んだすべてのノードを取得
Private Function fncGetAllNodes(ByVal Nodes As TreeNodeCollection) As ArrayList
Dim Ar As New ArrayList
Dim Node As TreeNode

For Each Node In Nodes
Ar.Add(Node)
If Node.GetNodeCount(False) > 0 Then
Ar.AddRange(fncGetAllNodes(Node.Nodes))
End If
Next

Return Ar
End Function

VB2005Expressで開発しています。

TreeViewにデータテーブルの値をセットして表示しています。
セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。左図のようにしたいのですが、右図のようになってしまいます。
あ あ
|-い |-い
| | | |
| -う | -う
お | -え
|-い お
| |
| -え
ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方が
いらっしゃいましたら教えて下さ...続きを読む

Aベストアンサー

fncSerchNodeで探しているノードが Node.Textとの比較でしか探していないのが原因でしょう

探すノードまでフルパスを検索してやれば希望通りになると思います
呼び出し側で 『階層5』を追加するための『階層4』ノードの検索に
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3 & "\" & strMenuName4)
と 階層1から階層4までを "\"でつないだ物をキーに探します

階層3を探すなら
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3)

階層2を探すなら
fncSerchNode(strMenuName1 & "\" & strMenuName2 )

階層1を探すなら
fncSerchNode(strMenuName1 )

fncSerchNodeのIf Node.Text = strMenuName Then を
If Node.FullPath = strMenuName Then
としてみてください

fncSerchNodeで探しているノードが Node.Textとの比較でしか探していないのが原因でしょう

探すノードまでフルパスを検索してやれば希望通りになると思います
呼び出し側で 『階層5』を追加するための『階層4』ノードの検索に
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3 & "\" & strMenuName4)
と 階層1から階層4までを "\"でつないだ物をキーに探します

階層3を探すなら
fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3)

階層2を探すなら
fncSer...続きを読む

QMSDNのセットアップ方法(ヘルプが見たいだけなんです。)

Visual Basic 6.0 Professional Editionです。

 ヘルプを見ようとしたら、「MSDNをインストールしてください。」と言われました。 

 インストール作業を開始すると、「Microsoft Developer Network ディスクの 1 を挿入してください」といわれました。 

 そ そんなCDもってないんですけど、、、、(汗.) 

 私 ヘルプを見たいだけなのにぃ~ ヘルプを参照できるようにするには、どうすればよろしいでしょうか。 教えてくださいませ。   

 okweb 過去ログから「MSDN ライブラリ」のURLはわかったのですが、これだと毎回オンラインにしないといけないです。
 http://www.microsoft.com/japan/developer/library/default.asp

Aベストアンサー

>購入しなおさないとダメですよね。  とほほ。。。

買いなおさなくとも、取りあえず、1年だけMSDN CD サブスクリプションを購入すれば、年4回、MSDN CDを送ってくれます。

たしか、こっちのほうが安いはずです。


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報