クラスへデータをセットするには?


n  2009-01-11 15:34:42  No: 145623

初めまして。現在入門書を読みながら2008 ExpressEditionでアプリを作ろうとして
います。現在、iniファイルからキー値を読出し、クラスに値をセットしようとして
いるのですが、そのセットのところでつまずいています。現在はキー値を読み出せて
もコンストラクタの値がセットされてしまっています。キー値をクラスの値にセット
するにはどのように修正すればよろしいのでしょうか。

以下作成中のソースの部分です。

Imports System.Runtime.InteropServices

Public Class Form1

※ dllの定義部分(省略)

Public CurDir As String
Public IniName As String = "sample.ini"

'フォーム出力時にiniファイルのデータを読み出し、クラス DefaultSettingに値を格納する
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CurDir = System.IO.Directory.GetCurrentDirectory
'iniファイルを読み、クラスにセットする。
iniFile_Read(CurDir, CurDir & "\" & IniName)
End Sub

'iniファイル読出し
Sub iniFile_Read(ByVal cdr As String, ByVal ininame As String)
Dim dfSetting As New DefaultSetting()
Dim strResult As String = Space(255)
Dim cntdb As String
Dim bkdo As String
Dim bkfld As String
Dim rirekidays As Integer

GetPrivateProfileString("db", "connect", "home", strResult, Len(strResult), ininame)
cntdb = dfSetting.setuzokusaki(Microsoft.VisualBasic.Left(strResult, InStr(strResult, Chr(0)) - 1))

GetPrivateProfileString("bkup", "do", "yes", strResult, Len(strResult), ininame)
bkdo = dfSetting.bkup(Microsoft.VisualBasic.Left(strResult, InStr(strResult, Chr(0)) - 1))

If bkdo = "yes" Then
ChkBKUPYes.Checked = True
GetPrivateProfileString("bkup", "folder", cdr, strResult, Len(strResult), ininame)
bkfld = dfSetting.bkupfld(Microsoft.VisualBasic.Left(strResult, InStr(strResult, Chr(0)) - 1))
TxtFolder.Text = bkfld
Else
ChkBKUPYes.Checked = False
TxtFolder.Text = ""
bkfld = ""
End If
rirekidays = dfSetting.rireki(GetPrivateProfileInt("historical", "days", 0, ininame))
TxtRirekidays.Text = rirekidays
End Sub

End Class

Class DefaultSetting
Private setuzoku As String
Private bkupdo As String
Private bkup_fld As String

''コンストラクタ  iniファイルの各キーの初期値を設定する
Sub New()
'接続先
setuzoku = "home"
bkupdo = "yes"
bkup_fld = System.IO.Directory.GetCurrentDirectory
rireki_days = 20
End Sub

'接続先に関するプロパティ 接続先はstockまたはtestdb001のどちらか
Property setuzokusaki(ByVal str As String) As String
Get
Return setuzoku
End Get
Set(ByVal value As String)
If value <> "home" And value <> "testdb001" Then
MessageBox.Show("接続先指定文字列エラー testdb001に接続します", "接続指定error")
value = "testdb001"
Else
setuzoku = value
End If
End Set
End Property

'バックアップのする/しないに関するプロパティ bkupdoはyesまたはnoのどちらか
Property bkup(ByVal str As String) As String
Get
Return bkupdo
End Get
Set(ByVal value As String)
If value <> "yes" And value <> "no" Then
value = "yes"
Else
bkupdo = value
End If
End Set
End Property
'バックアップ先に関するプロパティ
'指定したフォルダが調べて存在しなければこの実行ファイルがあるフォルダにセットする
Property bkupfld(ByVal fld As String) As String
Get
Return bkup_fld
End Get
Set(ByVal value As String)
If My.Computer.FileSystem.DirectoryExists(fld) = False Then
bkup_fld = System.IO.Directory.GetCurrentDirectory
Else
bkup_fld = value
End If
End Set
End Property

End Class

対象のsample.ini
[db]
connect=testdb001

[bkup]
do=yes
folder=c:\temp


2重投稿  2009-01-15 19:52:10  No: 145624

2重投稿先
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi?print+200901/09010013.txt


ちなつ  2009-01-20 05:40:44  No: 145625

解決してないかもですけど、一度投稿を閉じている訳で。

その後でまた考えて解らなくて質問してきたのでは?

それで2重投稿とかいうのもあまり酷いような。
(スレッドを検索してもヒットしないようになるまで待たないと
再度質問できないということになりますよね)

まぁ投稿者本人が「一度閉じましたが再考して解らなくて...」
とか冒頭に当然書くべきでしょうが。

あまり酷い言い方も良くないと思います。

私も随分前一度閉じて、再考して解らなくて投稿したら
マルチポストと罵られ、誰にも質問できなくて辛い思いをした
ことがあります。


2重投稿  2009-01-20 05:50:57  No: 145626

> その後でまた考えて解らなくて質問してきたのでは?
違います。
投稿時間を確認してください。

本来は投稿者が管理人に削除依頼を出すべきスレッドです。
回答者が解決してないスレッドと勘違いして回答を付ける
ことを防止するために書き込みしました。

今のところ、このスレッドの面倒を見ようと言う意思は
質問者にありません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加