システム開発備忘録 Visual Basic その他
変数型関連
'Date型に値を代入する
dateA = #12:00:00 AM#
'NULLのセット
'※DBNullはオブジェクトなので値としてセットする際はValueが必要
.Value = DBNull.Value
文字列の変換、フォーマット
Format()
'YYYY/MM/DD HH:MM:SS (24時間表示)
Format(Now,"yyyy/MM/dd HH:mm:ss")'24時間表示
Format(Now,"yyyy/MM/dd hh:mm:ss")'12時間表示
'数値を3桁の区切り記号で
textbox1.text = Format(intA, "#,###")
文字列の文字数、バイト数の取得
'文字数の取得
intRet = strTarget.Length
'半角文字を1バイトとしてバイト数取得
intRet = System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(strTarget)
'半角文字を2バイトとしてバイト数取得
intRet = System.Text.Encoding.Unicode.GetByteCount(strTarget)
バイト型配列の文字列への変換
'バイト型配列を文字列に変換する
'(byteTargetsがバイト型の配列変数)
strRet = System.Text.Encoding.GetEncoding("shift-jis").GetString(byteTargets)
Windowsのカレンダーの種類変更対策
Windowsのカレンダーの種類が「和暦」になっていると
.netのデフォルトカレンダーも和暦になってしまう
date型とstringの変換を和暦で行うので障害の原因となりやすい
(Windws7で確認)
そこで起動時に次のように指定する
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("ja-JP", False)
※パラメータでFalseを指定することでWindowsの和暦設定を引き継がなくなる
※スレッド単位での指定なので、マルチスレッドにする際はスレッドごとに指定が必要
フォームアプリケーションの場合は次のように書くこともできる
(マルチスレッドの場合はやはりスレッドごとに指定が必要)
Application.CurrentCulture = New System.Globalization.CultureInfo("ja-JP", False)
変換の都度指定する場合は次のように指定する
Dim DTFI As System.Globalization.DateTimeFormatInfo = _
New System.Globalization.CultureInfo("en-US").DateTimeFormat
Dim strNow As String = Now.ToString("yyyy/MM/dd HH:mm:ss", DTFI)
アプリケーション
二重起動の防止
'アプリケーションと同名のインスタンスが実行中かどうかを確認する
If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
'(同名のインスタンスが起動中ならここに辿り着く)
End If
クリックワンスのバージョンを取得する
'ClickOnce でインストールされていた場合、フォームキャプションにバージョン表示
If ApplicationDeployment.IsNetworkDeployed Then
Dim deploy As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
Form1.Text = deploy.CurrentVersion.ToString()
End If
実行フォルダを取得する
'自分自身の実行フォルダを取得
strMyPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath)
'次の記述でも取得可
'strMyPath = My.Application.Info.DirectoryPath
'strMyPath = Application.StartupPath
その他
Configファイルからの情報取得
Dim appSettings As Specialized.NameValueCollection = System.Configuration.ConfigurationManager.AppSettings
'指定の文字列を取得(app.configのvalue=で指定した値が代入される)
Dim strTarget As String = appSettings("TargetKeyName").ToString
'app.configファイル側の記述
<appSettings>
<!--キーと値を記述する-->
<add key="TargetKeyName" value="TargetValue" />
</appSettings>
レジストリの利用
スニペットの挿入の中にあるので、そこから流用。
スニペットにあること自体を忘れたときのために一応記載。
'レジストリ値の書込み
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\Software\CompanyName\ProductName\KeyName", "Name", "value")
'レジストリ値の書込み
Dim keyValue As String
keyValue = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\CompanyName\ProductName\KeyName", "valueName", "Default Value")
レジストキーを HKEY_CURRENT_USER\Software\VB and VBA Program Settings に追加で良い
場合は、SaveSetting関数でも良い。
'自分の会社名
Public GstrAppCompanyName As String = My.Application.Info.CompanyName
'自分のアセンブリ名
Public GstrAppAssemblyName As String
GstrAppCompanyName = My.Application.Info.CompanyName
GstrAppAssemblyName = My.Application.Info.AssemblyName
'レジストリ値の書込み
SaveSetting(GstrAppCompanyName, GstrAppAssemblyName, "Name", GintMsgNo)
strRet = GetSetting(GstrAppCompanyName, GstrAppAssemblyName, "Name", 0)
ガベージコレクション
用意されているオブジェクトがあるので一行のみでよい。
メモリを掴んだプロシージャの外側に記述する必要があるようなので注意。
'ガベージコレクション
System.GC.Collect()
|