システム開発 備忘録











システム開発備忘録 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()




Copyright (C) 2009- station-t.com All Rights Reserved , Link Free