- PR -

レジストリへの保存方法

投稿者投稿内容
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-06 10:43
いつも本当にご迷惑かけています。

'レジストリへ書き出す
Dim key1 As Microsoft.Win32.RegistryKey
Dim key2 As Microsoft.Win32.RegistryKey

key1 = Microsoft.Win32.Registry.CurrentUser
key1 = key1.CreateSubKey( _
"software\VB and VBA Program Settings\VBTips")

key2 = Microsoft.Win32.Registry.CurrentUser
key2 = key1.CreateSubKey( _
"software\VB and VBA Program Settings\VBTips")
key1.SetValue(TextBox1.Text, TextBox2.Text)
key2.SetValue(TextBox3.Text, TextBox4.Text)

key1.Close()
key2.Close()

'レジストリから読み込む

key1 = Microsoft.Win32.Registry.CurrentUser
key1 = key1.CreateSubKey( _
"software\VB and VBA Program Settings\VBTips")

key2 = Microsoft.Win32.Registry.CurrentUser
key2 = key1.CreateSubKey( _
"software\VB and VBA Program Settings\VBTips")

Dim tx12 As Single = CType(key1.GetValue(TextBox1.Text,textBox2.Text), Single)
Dim tx34 As Single = CType(key2.GetValue(TextBox3.Text,TextBox4.Text), ingle)
key1.Close()
key2.Close()

TextBox1〜4のTextが記憶され反映しませんが、どういう事でどうすればいいのでしょうか?
質問している本人があまりわかっていない為、説明不足かもしれませんがよろしくお願いします。

使用言語はVB.netです。


[ メッセージ編集済み 編集者: Nakata 編集日時 2004-05-06 10:46 ]

[ メッセージ編集済み 編集者: yoshi 編集日時 2004-05-06 10:47 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-05-06 11:04
諸農です。

確認ですが、

1.CreateSubKeyのところで
・ArgumentNullException
・SecurityException
・ArgumentException
・ObjectDisposedException
・UnauthorizedAccessException
の例外が発生していないか。

2.書き込み処理と読み込み処理を連続して行っているのかどうか。

3.Regeditツールで確認してもキーと名前と値が書き込まれていないのか。

2の場合は、Flush()を使えばいいかと思います。
また、今回の問題点ではないと思いますが、読み込み処理の所では意味を
わかりやすくするために、OpenSubKey()にしてもいいかと思います


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-05-06 11:14
引用:

yoshiさんの書き込み (2004-05-06 10:43) より:
Dim tx12 As Single = CType(key1.GetValue(TextBox1.Text,textBox2.Text), Single)
Dim tx34 As Single = CType(key2.GetValue(TextBox3.Text,TextBox4.Text), ingle)

TextBox1〜4のTextが記憶され反映しませんが、どういう事でどうすればいいのでしょうか?


あの、TextBox1 と TextBox3 には、保存時と同じキー名(修正:「キー名」→「値の名前」)を入力してから読み込んでるんですか?

--追記--
tx12 と tx34 の値は、どこかで TextBox2 と TextBox4 に設定しているんでしょうか?
あと、読み込めなかった場合に TextBox2 と TextBox4 の値がデフォルトになってるんですけど、そういう意図なんでしょうか?

[ メッセージ編集済み 編集者: なちゃ 編集日時 2004-05-06 11:18 ]

[ メッセージ編集済み 編集者: なちゃ 編集日時 2004-05-06 11:29 ]
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-06 11:20
key1.SetValue(TextBox1.Text, TextBox2.Text)
key2.SetValue(TextBox3.Text, TextBox4.Text)

key1とkey2と言う意味ですか?保存とは書き出しの事ですか。
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-06 11:45
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'レジストリから読み込む
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser
key = key.OpenSubKey( _
"software\VB and VBA Program Settings\VBTips")
Dim strVal As String = CType(key.GetValue("VB"), String)
key.Close()
MessageBox.Show("レジストリ:" + strVal, "実行結果")
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
'レジストリへ書き出す
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser
key = key.CreateSubKey( _
"software\VB and VBA Program Settings\VBTips")
key.SetValue("VB", "sample")
key.Close()
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click
'レジストリから削除する
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser
key = key.OpenSubKey( _
"software\VB and VBA Program Settings\VBTips", True)
key.DeleteValue("VB")
key.Close()
End Sub

このコードを参考に書いてみたのですが…。
>tx12 と tx34 の値は、どこかで TextBox2 と TextBox4 に設定しているんでしょうか?
していません。サンプルを見て設定しないと思ったので(サンプルは文字列だから?)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-06 12:06
 誰かの作ったコードを参考にするのもいいのですが、その前にMSDNライブラリで、仕様を確認しましょう。
RegistryKey.SetValue メソッド
コード:
Public Sub SetValue( _
   ByVal name As String, _
   ByVal value As Object _
)


引数nameとvalueはセットです。nameという「名前」に、valueという「値」を結びつけます。ここで
引用:

key1.SetValue(TextBox1.Text, TextBox2.Text)
key2.SetValue(TextBox3.Text, TextBox4.Text)
・・・
key1.GetValue(TextBox1.Text,textBox2.Text)
key2.GetValue(TextBox3.Text,TextBox4.Text)


とされていますが、これをトレースしてみましょう。

・TextBox1 ← 123
・TextBox2 ← 456
・TextBox3 ← 789
・TextBox4 ← 012

と入力していたとき、カレントユーザハイブの"software/VB and VBA Program Settings/VBTips"に、”名前:123 値:456”という組、"software/VB and VBA Program Settings/VBTips/software/VB and VBA Program Settings/VBTips"に、"名前:789 値:012"という組が格納されます。

そして、読み込みの時にはおそらくテキストボックスは空白でしょうから、カレントユーザハイブの"software/VB and VBA Program Settings/VBTips"から、”名前:(空白)”の値、"software/VB and VBA Program Settings/VBTips/software/VB and VBA Program Settings/VBTips"から、"名前:(空白)"の値を読み込もうとします。


 なぜこのようなことになるかは、リンクを張っているMSDNライブラリを読んでください。どう直せばよいかも、自ずとわかると思います。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-05-06 12:52
引用:

yoshiさんの書き込み (2004-05-06 11:45) より:
>tx12 と tx34 の値は、どこかで TextBox2 と TextBox4 に設定しているんでしょうか?
していません。サンプルを見て設定しないと思ったので(サンプルは文字列だから?)


サンプルはあくまでサンプルであって、違う動作をさせたいのなら、サンプルを参考にして自分の意図した動作をするように変える必要があるでしょう。
サンプルの動作を理解していますか?
このサンプルは、テキストボックスの値を、保存、復元するサンプルですか?
# 違いますよね?

何も考えずにできるのはサンプルをそのまま動かすことだけです。
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-06 23:44
'レジストリへ書き出す
Dim key As Microsoft.Win32.RegistryKey


key = Microsoft.Win32.Registry.CurrentUser
key = key.CreateSubKey( _
"software\VB and VBA Program Settings\VBTips")


key.SetValue("abc", TextBox1.Text)
key.SetValue("abc", TextBox2.Text)
key.SetValue("abc", TextBox3.Text)
key.SetValue("abc", TextBox4.Text)

key.Close()

MSDNライブラリRegistryKey.SetValue メソッド を参考にさせてもらい、こういう風に書いてみましたが動作しませんでした。

Public Sub SetValue( _ ByVal name As String, _ ByVal value As Object _)
このコードだとkeyなんて宣言しなくてもいいのですか?


Public Sub SetValue( _ ByVal abc As String, _ ByVal textbox.1 As Object _)

end sub

↑のような感じのコードに直せばいいのですか?(識別子が必要ですと出ますが…)
なんか無茶苦茶な質問ですいません×

スキルアップ/キャリアアップ(JOB@IT)