Vbのオブジェクトをファイルに保存したいのですが、方法が解りません。

例えば、スプレットシートの(*.frx)ファイルのようなイメージで、
プログラムから、ある機能を呼んだ際に、ファイルからオブジェクトを
取得して、フォーム等に貼り付けるといったものです。

私の考え方そのものが、間違っているのでしょうか?

どなたか、教えください。
ちなみに保存したいものは、"TreeView"の"nodes"です。

よろしくお願いいたします。

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

とは API」に関するQ&A: JAVADOC、API とは

A 回答 (3件)

再度、田吾作7です。


うーむ、ユーザコントロールは基本的にユーザが自分の目的にために作成するコントロールだから、、、ベストなサンプルは見当たりませんでした。
しかし、仕様に添ったものではないですが、サンプルのユーザコントロールを配布してるところがありますので、そちらを紹介しますね。

み~くんパパの仕事場
http://www.mitene.or.jp/~sugisita/family/papa/vb/
メジャーなHPだから知ってるかな?(^^;)

今回のことだけに限らず、いいサンプルを配布してるので、見たことがないのであれば、一見の価値ありですよ!!

じゃ、がんばってくださいねー

参考URL:http://www.mitene.or.jp/~sugisita/family/papa/vb/
    • good
    • 0
この回答へのお礼

サンプルを参考にしながら、いろいろやってみようと思います。

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

お礼日時:2001/10/19 01:26

TreeViewはWindowsAPIを使用してできるものです。


スプレッドシートはフォームとAPI関数を多用して作られるもので、その中のプロパティ値は独自に保持しています。

状況から察するに、ユーザコントロールを作成してみてはいかがでしょうか?
TreeViewを埋め込んだActiveXコントロールを作成したら、手っ取り早いかも?
    • good
    • 0
この回答へのお礼

ありがとうございます。

まだ経験が浅くユーザコントロールの作成は未経験、その上時間も無かったので、
今回は必要な情報をテキストファイルに出力することで解決しました。

TAGOSAKU7さんのアドバイスは今後の参考にしたいと思います。

やはり、知識の量は物を言いますね。
良かったら、参考になる書籍やURL等を教えて頂けないでしょうか?

お礼日時:2001/10/19 00:03

オブジェクトやコントロールは、ユーザー定義型の構造体と違って、内部にたくさんの参照を持っています。


参照とはあるデータの格納されたメモリアドレスのことで、これは動的で毎回同じとは限りません。

オブジェクトの値を保存したいときは、プロパティをすべて書き出すぐらいしか手段はないでしょう。
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

よく考えるとそうですね。

まだ私の理解が足りないようです。

参考になりました。

お礼日時:2001/10/18 23:46

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

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

Qfrxファイルの役目

VB6の開発環境で、拡張子がfrxというVisual Basic Form Binary Fileが出来ますが、何に使われるのですか?
2台のPCで同じプロジェクトの開発をしている際、frmファイルだけをコピーすると、VBでファイルを開く時エラーになることがあります。
frxファイルも同時にコピーする必要があるのでしょうか?
2台のPCのOSは、Win2000とWinXP ProSP2で、XPから2000へコピーした際は問題なく、2000からXPへコピーした際のみ、上記の問題が発生します。
よろしくお願いします。

Aベストアンサー

「ほげ.frm」
「ほげ.frx」
があったとします。

「ほげ.frm」をテキストエディタで開いてみてください。
どこかに「ほげ.frx」の記述が存在していたら、その「ほげ.frm」は「ほげ.frx」を必要とします。

主に、拡張コントロールのプロパティ情報が記載されています。
W2K←→XPsp2
のコピーに関しては、本来どちらもいけると思うのですが、、、
VBのサービスパックや、何かの拡張コントロールのサービスパックが異なっていたりしませんか?

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...続きを読む

Qスプレットシートでフォーカスをあてない方法

スプレットシートで入力させたくない、ボックスとかを、フォーカスをあてない方法はあるのでしょうか?
スプレットシートのプロパティーとかで設定が
できたらいいのですが、教えてください。

Aベストアンサー

ロックを掛けて尚且つ、常時入力モードにするのは駄目でしょうか?

スプレッドデザイナの
スプレッド動作環境の[全般]タブの一番左上のチェックボックスなんですが、これだとロックされているセルを選択しないはずです。ただ、セルの複数選択は出来なくなりますが…。

QActiveX EXEのオブジェクトに渡したオブジェクトが微妙

またまた微妙な質問ですみません。

-------
ActiveX EXEプロジェクト
Class Hoge

Public Sub Moge(lst)

Dim Cast As ListBox
MsgBox TypeName(lst) 'ListBoxと表示される
Set Cast = lst 'ここがエラー
Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能

End Sub
-------
標準EXE
Class Form1 (List1を配置)

Dim X As New Hoge

Private Sub Form_Load()

X.Moge List1

End Sub
-----

このように、アウトプロセスのオブジェクトにフォームのコントロールを渡しました。
引数の型をAs ListBoxにしたかったのですが、それだとまずそこで型が一致しないといわれます。
しようがないのでVariantで引数を宣言し、渡した後にキャストしようと思ったのですが、そこでも型が一致しないといわれます。
TypeName関数は "ListBox" を返すし、Variant型のままメンバにアクセスすることはできるのですが、ListBox型の変数に代入することだけできないのです。

別プロセスのオブジェクトには、オブジェクトの参照は渡せないのでしょうか?

またまた微妙な質問ですみません。

-------
ActiveX EXEプロジェクト
Class Hoge

Public Sub Moge(lst)

Dim Cast As ListBox
MsgBox TypeName(lst) 'ListBoxと表示される
Set Cast = lst 'ここがエラー
Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能

End Sub
-------
標準EXE
Class Form1 (List1を配置)

Dim X As New Hoge

Private Sub Form_Load()

X.Moge List1

End Sub
-----

このように、アウトプロセスのオブジェクトにフォームのコ...続きを読む

Aベストアンサー

リストボックスをオブジェクト変数にセットして、何をしたいのでしょうか?
それがわかった方が、求める動きが可能かもしれません。

別プロセスでオブジェクトを渡すのは無理かと思います。
もしできるとしたら、オブジェクトのハンドルを取得し、オブジェクト変数の領域を確保。そこに代入という方法が思いつきますが、領域確保が思うようにならないVBでは落ちると思います。

ただリストボックスの選択している場所を得たいとか、選択させたいとか、そういう操作なら別プロセスなら、ハンドルだけで操作する方法もあります。

結局結末は何がしたいのでしょうか?

QVisual Basic.NETのエラー("オブジェクト参照がオブジェクト インスタンスに設定されていません。")について

DLLを読み込むプログラムで、以下のように宣言した関数"VCread_wave_file"を呼び出そうとすると、
"オブジェクト参照がオブジェクト インスタンスに設定されていません。"
というエラーが出てしまうのですが、なぜなのでしょうか?

プログラムは以下のようになっています。

Public Class Form1
Inherits System.Windows.Forms.Form

Dim status As Integer
Dim wavelength As Long
Dim samplf As Double

Private Declare Function VCread_wave_file Lib "Vcon.dll" (ByVal FileName As String, ByVal tmpFilename As String, ByVal wavelength As Long, ByVal samplingFrequency As Double) As Integer

(中略)

Private Sub ChangeStartButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChangeStartButton.Click

status = VCread_wave_file("rectmp.wav", "rectmp.raw", wavelength, samplf)
Label4.Text = status

End Sub

よろしくお願いいたします。

DLLを読み込むプログラムで、以下のように宣言した関数"VCread_wave_file"を呼び出そうとすると、
"オブジェクト参照がオブジェクト インスタンスに設定されていません。"
というエラーが出てしまうのですが、なぜなのでしょうか?

プログラムは以下のようになっています。

Public Class Form1
Inherits System.Windows.Forms.Form

Dim status As Integer
Dim wavelength As Long
Dim samplf As Double

Private Declare Function VCread_wave_file Lib "Vcon.dll" (ByVal FileNa...続きを読む

Aベストアンサー

そのDLLは知らないのですが、アンマネージならまずその型は合っているかどうかの確認を。
VB.NETではLongは64bit、Integerは32bitに変更されていますので、VB6.0でのLongを意味しているならVB.NETではIntegerです。IntegerならShortになります。


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

おすすめ情報