猫がプログラムを組む

猫は直ぐに忘れるのでメモを取ります

CSVファイルを書き込む

実行ファイルのフォルダの「CSV」フォルダ内にCSVファイルを書き込みます。

Imports System.IO
Imports Microsoft.VisualBasic.FileIO

Public Sub setCsvFile( fp As String)
        Using sw As New StreamWriter(fp, False,
              System.Text.Encoding.GetEncoding("Shift_JIS"))
            For Each _item As clsAssyItem In _items
                sw.Write(_item.id.ToString & ",")
                sw.Write(_item.flag & ",")
                sw.Write("""" & _item.name & """,")
                sw.Write(_item.number.ToString & vbCrLf)
            Next
        End Using
End Sub

呼び出し側

' アイテムクラス
Public Class clsItems
        Public id As Double
        Public flag As Boolean
        Public name As String
        Public number As Integer
End Class

' アイテムリスト
Public _items As New List(Of clsItems)

Dim _item As New clsItems
_item.id = 1
_item.flag = True
_item.name = "Name1"
_item.number = 123
_items.Add(_item)

Dim fp As String = Path.Combine(Application.StartupPath, "csv")
fp = Path.Combine(fp, "file1.csv")

setCsvFile( fp )

CSVファイルを読み込む

実行ファイルのフォルダの「CSV」フォルダ内のCSVファイルを読み込みます。

Imports System.IO
Imports Microsoft.VisualBasic.FileIO

Public Sub getCsvFile( fp As String)
        If File.Exists(fp) Then
            Using parser As New TextFieldParser(fp, 
        System.Text.Encoding.GetEncoding("Shift_JIS"))
                parser.TextFieldType = FieldType.Delimited
                parser.SetDelimiters(",")
                Dim _row As String()
                While Not parser.EndOfData
                    _row = parser.ReadFields()
                    Dim _item As New clsItems
                    _item.id = CDbl(_row(0))
                    _item.flag = CBool(_row(1))
                    _item.name = _row(2)
                    _item.number = CInt(_row(3))
                    _items.Add(_item)
                End While
            End Using
        End If
End Sub

呼び出し側

' アイテムクラス
Public Class clsItems
        Public id As Double
        Public flag As Boolean
        Public name As String
        Public number As Integer
End Class

' アイテムリスト
Public _items As New List(Of clsItems)

Dim fp As String = Path.Combine(Application.StartupPath, "csv")
fp = Path.Combine(fp, "file1.csv")
getCsvFile( fp )

このままでは、正常動作はしませんが、健忘録程度に記述します。

Panelコントロールを単色で塗りつぶす

グラフィックでカーソルなどを独自に描画した時に余分な線などが残ってしまった時にパネル全体を単色で塗りつぶします。

Dim g As Graphics = Panel1.CreateGraphics
g.FillRectangle(Brushes.Gray, 0, 0, Panel1.Width, Panel1.Height)

これでPanelは綺麗になります。

ファイル名に使用できない文字の置き換え

ファイル名に使用できない文字を置き換えるメソッド

Imports System.IO

    Public Function ReplaceInvalidChar(ByVal _str As String, Optional ByVal chrReplace 
        As Char = "_"c) As String

        Dim invalidChars() As Char = Path.GetInvalidFileNameChars()
        For Each _char As Char In invalidChars
            _str = _str.Replace(_char, chrReplace)
        Next
        ReplaceInvalidChar = _str

    End Function

使用方法は、

Dim fp As String = ReplaceInvalidChar(_str) & ".csv"

禁止文字が”_”に置き換わります

ListView 更新のチラツキを抑制する

ListViewを更新する時のチラツキが気になる

Imports System.Reflection

Dim RedrawFlags As BindingFlags = BindingFlags.NonPublic Or BindingFlags.Instance Or 
    BindingFlags.SetProperty
ListView1.GetType().InvokeMember("DoubleBuffered", RedrawFlags, Nothing, ListView1, 
    New Object() {True})
ListView1.View = View.Details

これでチラツキが抑制されます。

システムの起動時にSHIFTキーを判定する

システムの起動時にSHIFTキーが押下された状態の時に特別な処理をする
(フォームのLoad/Shownイベント)

       If (Control.ModifierKeys And Keys.Shift) = Keys.Shift Then
            ' SHIFTキーが押下されている場合の処理
        End If

ControlキーもAltキーも同じように判定できるので、状態を戻したいとき
などに使用すると便利かな。