Skip to content

Visual Basic.NET いろいろなテクニック⑤

Posted in Visual Basic .NET, プログラム関係, and 技術メモ


業務アプリで使用できそうなものを五月雨に記録しておく。
まとまるまで待っていると忘れてしまうために・・・。ww

なお、このブログ内に記載しているソースの転載・転用については何も縛りはありません。
ご使用の状況の如何に問わず、作者たる当方は結果についてその責任を一切負いません。ご使用は自己責任の範囲でお願いいたします。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【RGB値を指定して色を指定する】

'定数として宣言する場合
Public ColorCode As System.Drawing.Color = System.Drawing.Color.FromArgb(255, 255, 192)

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【構造体の宣言】

VB6をやっていた頃はもっと簡単に宣言できましたが、.NETになってこのように表記になりました。

Public Structure [構造体宣言名]
  Dim [宣言A] As [型]
例:
  Dim USERID As String
  Dim USERPASS As String
End Structure

Public [利用する時の構造体名] As [構造体宣言名]

※実際に利用した時の例
データベース系の情報を格納するサンプル


Public Structure _DB_INFO
  Dim DB_USERID As String
  Dim DB_USERPASS As String
End Structure

Public DB_INFO As _DB_INFO

利用するときは
DB_INFO.DB_USERID = "hoge"

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【ファンクションキーの有効・無効を制御する】

業務用アプリを作成している時、特定のキーに機能を持たせてショートカットを図る方法は昔からあります。
その代表例としては「ファンクションキー(F1~F12)」の利用があります。
状況に応じてON・OFFを制御するのはいちいちめんどくさいので単純にON・OFFの制御を行うロジックを組んでみました。

前提条件としてフォーム上にボタンをF1~F12分まで作成し、各ボタンに「Button_F*」(*は番号)を作成しておく。

スイッチの定義

‘ファンクションキーのON・OFFの組み合わせを登録(定数化の例)
‘左から順に「F1」を表し、「-」は機能の無い区切り文字(わかりやすくするもの)です。
‘ONにしたいキーの場所に1を立てる。OFFにしたい場合は0を立てる。

#Region "F12モード"
    Public Structure FunctionMode12
        Const F001 As String = "0000-0000-0000"  'すべてのボタンを無効
        Const F002 As String = "1000-0000-0000"  '[F1]のみ有効
        Const F003 As String = "1000-0000-0001"  '[F1]と[F12]を有効
    End Structure
#End Region

宣言

    'ボタンコントロール配列のフィールドを作成
    Private FuncButtons() As System.Windows.Forms.Button

フォームロード時の処理

    '--------------------------------------------------------------------------------
    'フォームロード
    '--------------------------------------------------------------------------------
    Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

      With Me

        'ボタンコントロール配列の作成
        .FuncButtons = New System.Windows.Forms.Button(11) {}
        'ボタンコントロールの配列にすでに作成されているインスタンスを代入
        .FuncButtons(0) = .Button_F1
        .FuncButtons(1) = .Button_F2
        .FuncButtons(2) = .Button_F3
        .FuncButtons(3) = .Button_F4
        .FuncButtons(4) = .Button_F5
        .FuncButtons(5) = .Button_F6
        .FuncButtons(6) = .Button_F7
        .FuncButtons(7) = .Button_F8
        .FuncButtons(8) = .Button_F9
        .FuncButtons(9) = .Button_F10
        .FuncButtons(10) = .Button_F11
        .FuncButtons(11) = .Button_F12

      End With
    End Sub

関数の定義

    ''' <summary>
    ''' ファンクションキーの有効無効制御イベント(F12有効モード)
    ''' </summary>
    ''' <param name="strFCode">ファンクション文字列(12桁)</param>
    ''' <remarks></remarks>
    Public Sub BaseForm12_Function(ByVal strFCode As String)

        Dim intI As Integer = 0
        Dim intA As Integer = 0

        If Len(strFCode) <> 14 Then
            MessageBox.Show("ファンクション文字列が不正です。" & Chr(13) & "終了いたします。", _
                            "BaseForm_Functionエラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End
        End If

        For intI = 1 To 14
            '「-」を除外
            Select Case intI
                Case 1 To 4
                    intA = 1
                Case 5 To 9
                    intA = 2
                Case 10 To 14
                    intA = 3
            End Select
            'チェック
            If Mid(strFCode, intI, 1) = "0" Then
                Me.FuncButtons(intI - intA).Enabled = False

            ElseIf Mid(strFCode, intI, 1) = "1" Then
                Me.FuncButtons(intI - intA).Enabled = True

            ElseIf Mid(strFCode, intI, 1) = "-" Then
                '「-」は区切り記号の為に何もしない

            Else
                Me.FuncButtons(intI - intA).Enabled = False

            End If
        Next
    End Sub

実際の使用例

実際に利用する場合はCall文で呼び出せば反映します。
場合に応じて有効無効を定義する型を登録して場面に応じて呼び出して利用できればいいと思います。

  Call BaseForm12_Function(FunctionMode12.F001)

応用利用

業務アプリでは同じような構成(型)を作って使いまわす方が効率的です。
このファンクションキーの機能も各フォームにいちいち貼り付けて機能を追加するにはめんどくさいです。
しかも機能を拡張する場合など、作成済のフォームを一つ一つ修正する必要が出てきます。
基本的な共通機能を持ったベースフォームを作成して機能を盛り込むことをお勧めします。
次回はベースフォームの作成について記述します。

Be First to Comment

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA