-
フォーム上にピクチャボックスのみ配置しても、フォームが画像よりもサイズが小さい場合、スクロールはできません。 そこで、フォーム上にパネルを貼付て、そのパネル上にピクチャボックスを全面表示で貼り付けます。
画像イメージは System.Drawing.Image.FromFile メソッドで設定します。 尚、画像ファイルは以下のものを使います。
ソースは以下の様になります。
フォームロード時にパネルを生成しスクロール許可を与えます。 更に、ピクチャボックスを生成し、各種の設定を行ってからパネルのコントロールに追加し、 そのパネルをフォームのコントロールに追加します。パネルとピクチャボックスによる画像表示
Public Class frmPanelPic ' パネルの静的変数宣言 Dim Panel1 As Panel ' ピクチャボックスの静的変数宣言 Dim Pic1 As PictureBox 'フォームロード時イベント処理 Private Sub frmPanelPic_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' パネルの生成 Panel1 = New Panel ' [Dock]:フォーム全体にFill Panel1.Dock = DockStyle.Fill ' スクロール許可 Panel1.AutoScroll = True ' ピクチャボックスの生成 Pic1 = New PictureBox ' [SizeMode]:ピクチャボックスの大きさに合わせる指定 Pic1.SizeMode = PictureBoxSizeMode.AutoSize ' 画像イメージ Pic1.Image = System.Drawing.Image.FromFile("Desert.jpg") ' ピクチャボックスをパネル上に追加表示 Panel1.Controls.Add(Pic1) ' パネルをフォーム上に追加 Me.Controls.Add(Panel1) End Sub End Class
これを実行すると以下の様な表示になります。 左側は初期表示で、右側はフォームのサイズを大きくした場合の状態です。
関連する記事
⇒標準コントロールのパネルの使い方について(Panel)
⇒標準コントロールのパネルの使い方について2(複数Panelの表示切替)
PR -
フォーム上に複数のパネルを配置して、ある条件のもとで各パネルを表示することで異なる処理が行えます。
今回は2個のパネルをフォーム上に貼り、それぞれのパネルは異なるコントロールを配置します。
1個目はテキストボックスを5個配置し、2個目のパネルはチェックボックスを5個配置します。
更に、パネルの切り替え用にラジオボタンを2個設置します。 デザイン画面では以下の様になります。
尚、ソースは以下の様になります。
フォームロード時にフォームの幅を1個のパネルのみを表示する幅に設定し、パネル2の座標位置をパネル1と同じにします。 また、初期のパネル切替を行う為にパネル1の状態を「ON」にします。
パネルそれぞれに対応するラジオボタンのクリック時に、対応するパネル切替を行う様にしています。2個のパネルの表示切替
Public Class frmPanelM1 ' フォームロード時処理 Private Sub frmPanelM1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'ウインドウの横幅を1個のパネルのみ表示する「300」にする Me.Width = 300 'パネル2の横位置をパネル1と同位置にする Me.Panel2.Left = Me.Panel1.Left '最初のパネル1に設定 Me.RadioButton1.Checked = True End Sub ' ラジオボタン1変化時処理 Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged If DirectCast(sender, RadioButton).Checked = True Then ' ラジオボタン1がONの場合、パネル1表示 Call Me.DisplayPanel(1) End If End Sub ' ラジオボタン2変化時処理 Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged If DirectCast(sender, RadioButton).Checked = True Then ' ラジオボタン2がONの場合、パネル2表示 Call Me.DisplayPanel(2) End If End Sub ' パネル表示切替処理 Private Sub DisplayPanel(ByVal intPanelNo As Integer) Select Case intPanelNo Case 1 Me.Panel1.Visible = True Me.Panel2.Visible = False Case 2 Me.Panel1.Visible = False Me.Panel2.Visible = True End Select End Sub End Class
これを実行すると以下の様な表示になります。右側はラジオボタン2をクリックしてパネル2を表示した状態です。
(ラジオボタンを交互にチェックすれば、パネル1⇔パネル2が交互に表示されます)関連する記事
⇒標準コントロールのパネルの使い方について(Panel)
⇒パネル上にピクチャボックスを貼付て画像スクロールさせる方法ついて(Panel、PictureBox)
-
文字列から数値型への変換は以下のページにありますが、今回はオブジェクト型から数値への変換を記します。
⇒文字列から数値型への変換(parse - tryparse)
Integer型に変換するために Integer.TryParse メソッドを使いますが、引数としては文字列なので 先ずはオブジェクト型から文字列型への変換関数を宣言します。 ソースは以下の様になります。(Objectデータが「Nothing」「DBNULL」の場合には空文字列を返します。)オブジェクト型からString型への変換
'''
''' Object型からString型にデータ変換 ''' ''' <param>元のObject</param> '''String型に変換後の値 '''String型に変換できない場合は「""」を返す Function ObjToStr(ByVal objSrc As Object) As String Dim strRet As String Try If objSrc Is Nothing Then 'Objectデータが「Nothing」の場合 strRet = "" ElseIf IsDBNull(objSrc) Then 'Objectデータが「DBNULL」の場合 strRet = "" Else '文字列に変換 strRet = CStr(objSrc) End If Catch ex As Exception 'エラーの場合 strRet = "" End Try '変換値を返す Return strRet End Functionこのオブジェクト型から文字列型への変換関数を利用して、 オブジェクト型からInteger型への変換関数を宣言します。
オブジェクト型からInteger型への変換
'''
''' Object型からInteger型にデータ変換 ''' ''' <param>元のObject</param> '''Integer型に変換後の値 '''Integer型に変換できない場合は「0」を返す Function ObjToInt(ByVal objSrc As Object) As Integer Dim intRet As Integer Try 'String型に変換 Dim strSrc As String = ObjToStr(objSrc) 'Integer型に変換 If Integer.TryParse(strSrc, intRet) = False Then '変換が不可の場合 intRet = 0 End If Catch ex As Exception 'エラーの場合 intRet = 0 End Try '変換値を返す Return intRet End Function
更にオブジェクト型からDecimal型への変換は以下の様になります。 (その他のDouble型とかも同様に宣言できます)
オブジェクト型からDecimal型への変換
'''
''' Object型からDecimal型にデータ変換 ''' ''' <param>元のObject</param> '''Decimal型に変換後の値 '''Decimal型に変換できない場合は「0」を返す Function ObjToDec(ByVal objSrc As Object) As Decimal Dim decRet As Decimal Try 'String型に変換 Dim strSrc As String = ObjToStr(objSrc) 'Decimal型に変換 If Decimal.TryParse(strSrc, decRet) = False Then '変換が不可の場合 decRet = 0 End If Catch ex As Exception 'エラーの場合 decRet = 0 End Try '変換値を返す Return decRet End Function関連する記事
⇒文字列から数値型への変換(parse - tryparse)
-
標準コントロールのボタンは特によく使われると思いますが、 今回は、ボタンに画像を張付けの使い方について順を追って説明したいと思います。
■ボタン上の Image に画像を張り付ける方法
フォーム上にボタンを張り付けて、そのボタンの Image プロパティに画像を設定します。
(以下の図は、ボタンを張り付けたところまで)次にボタンの Image プロパティの「…」ボタンをクリックします。リソースの選択ダイアログが開きます。
上のダイアログの「プロジェクト リソースファイル」の下の方の「インポート(M)」ボタンをクリックします。
以下のファイル選択ダイアログが開きますので、そこでペイント等の画像ソフトで作成しておいた画像ファイルを指定します。 (今回は簡単な矢印の画像のファイルを作成しました)このダイアログの「開く」をクリックすると以下の様に画像がリストに反映されます。 矢印の画像ファイルが選択されている状態で、「OK」をクリックします。
そのボタンの Image プロパティに画像が設定されたことが分かります。 ここで TextImageRelation プロパティを適当な値(今回は ImageBeforeText)に設定します。 そうしますと左側のデザイン画面にも画像が表示されます。
以下のソースを見て下さい。 通常通りボタンのクリックイベントの処理を記述して、ボタンが働くことを確認します。Public Class frmButton Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MsgBox("Bitmapイメージを貼付したボタン") End Sub End Class
これを実行すると以下の様な表示になります。
■別の場所からボタンクリックを起動する方法
別の処理からボタンのクリック処理を呼び出したい場合がありますが、 この時にはボタンの PerformClick メソッドをコールします。
次は、上記で張り付けたボタンのコピーをフォーム上で行います。 第2のボタンから最初のボタンクリックを呼出します。Public Class frmButton Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MsgBox("Bitmapイメージを貼付したボタン") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '別のボタンからクリックイベントを起動 Me.Button1.PerformClick() End Sub End Class
これを実行すると以下の様な表示になります。(下図は Button2 をクリックしたところです)
■ボタン全面に画像を張り付ける方法
新しいフォームにボタンを追加して、サイズを縦横 200 ピクセルぐらいとします。 さらにボタンの BackgroundImage に画像ファイルを指定します。
(以下の図は、ボタンを張り付けたところまで)次にボタンの BackgroundImage プロパティの「…」ボタンをクリックします。リソースの選択ダイアログが開きます。 「ローカル リソース」をクリックします。
上のダイアログの「ローカル リソース」の「インポート(M)」ボタンをクリックします。
以下のファイル選択ダイアログが開きますので、そこでペイント等の画像ソフトで作成しておいた画像ファイルを指定します。 (今回は簡単な四角い画像のファイルを作成しました)このダイアログの「開く」をクリックすると以下の様に画像がリストに反映されます。 さらに、「OK」をクリックします。
そのボタンの BackgroundImage プロパティに画像が設定されたことが分かります。 ここで FlatStyle プロパティを Flat に設定します。 そうしますと左側のデザイン画面にも画像が表示されます。
このままプログラムを実行してもボタンの画像は全体が表示されませんので、ボタンの画像描画などは自分で行うことになります。
フォームロード時にボタンのペイントイベントの処理ハンドラを登録します。
ペイントイベントでは、ボタンの背景画像をボタンのサイズに合わせて再描画します。 その後で、ボタンの Text プロパティに設定された文字列を、ボタンの中央に表示します。
背景画像の描画には Graphics.DrawImage メソッドを使用し、 文字列の描画には Graphics.DrawString メソッドを使用します。
文字列描画の Graphics.DrawString では StringFormat クラスを用いてボタンのTextを描画の位置指定します。Public Class frmButton2 Private Sub frmButton2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'Button1のPaintイベントハンドラを追加 AddHandler Button1.Paint, AddressOf Button1_Paint End Sub Private Sub Button1_Paint(sender As Object, e As PaintEventArgs) 'ボタンの背景画像をボタンの大きさに合わせて描画 e.Graphics.DrawImage(Me.Button1.BackgroundImage, Me.Button1.ClientRectangle) 'StringFormatクラスを用いてボタンのTextを描画の位置指定 Dim Sfrm As New StringFormat() '文字列の水平位置 Sfrm.Alignment = StringAlignment.Center '文字列の垂直位置 Sfrm.LineAlignment = StringAlignment.Center 'ブラシの作成 Dim Brs As Brush = New SolidBrush(Me.Button1.ForeColor) e.Graphics.DrawString(Me.Button1.Text, Me.Button1.Font, Brs, Me.Button1.ClientRectangle, Sfrm) 'ブラシの解放 Brs.Dispose() 'StringFormatの解放 Sfrm.Dispose() End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MsgBox("イメージボタンをクリック") End Sub End Class
これを実行すると以下の様な表示になります。関連する記事
⇒標準コントロールのパネルの使い方について(Panel)
⇒標準コントロールのパネルの使い方について2(複数Panelの表示切替)
⇒パネル上にピクチャボックスを貼付て画像スクロールさせる方法ついて(Panel、PictureBox)
-
フォーム上に各種のコントロールを配置する場合に、パネルを使ってグループ分けを行うことはよくあります。
そこで今回は、の使い方について順を追って説明したいと思います。■パネル上のコントロールを一括 Enabled/Disabled 設定
フォーム上にパネルを張り付けて、そのパネルの上に5個のテキストボックスを張り付けています。 更にパネルへの処理を行う為に1個のボタンを配置します。
以下のソースを見て下さい。 ボタンのクリックイベントでパネルの Enabled の値を反転しています。
パネルへの Enabled 値を設定することで、パネルの上のコントロールを全て不可設定にできます。 これは結構便利だと思います。Public Class frmPanel1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'パネルの「Enabled」を反転設定 Me.Panel1.Enabled = Not (Me.Panel1.Enabled) End Sub End Class
これを実行すると以下の様な表示になります。右側はボタンをクリックしてパネルを Disabled にした状態です。
■パネル上の個別のコントロールの Enabled/Disabled 設定との関係
次は、パネルのテキストボックスの直前にチェックボックスを配置して、デフォルトとして Checked の状態にします。 それぞれのチェックボックスの変化でテキストボックスの許可を設定してやります。
Public Class frmPanel2 'パネルの「Enabled」を反転 Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click Me.Panel1.Enabled = Not (Me.Panel1.Enabled) End Sub 'チェックボックスの「Checked」をパネルの「Enabled」に設定 Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged Me.TextBox1.Enabled = Me.CheckBox1.Checked End Sub Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged Me.TextBox2.Enabled = Me.CheckBox2.Checked End Sub Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged Me.TextBox3.Enabled = Me.CheckBox3.Checked End Sub Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged Me.TextBox4.Enabled = Me.CheckBox4.Checked End Sub Private Sub CheckBox5_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox5.CheckedChanged Me.TextBox5.Enabled = Me.CheckBox5.Checked End Sub End Class
これを実行すると以下の様な表示になります。 右側は1個目と、4個目のチェックボックスをOFFにしてテキストボックスを Disabled にした後で、 ボタンをクリックしてパネルを Disabled にした状態です。
パネルの Enabled を Disable にした場合にはパネル上のコントロールの状態のまま不可状態(パネル全体に灰色)になります。 再度ボタンをクリックすれば、元の状態になることが分かります。■パネル上のテキストボックス一括クリア
上記のフォームにボタンを追加して、そのボタンクリック時の処理として、パネル上のテキストボックスを全てクリアする方法を示します。
パネルにはその上に存在するコントロールを Controls プロパティに持っているので、 それを For Each 文で順次取得し、取得されたテキストボックスに対して処理を行います。Public Class frmPanel3 'パネルの「Enabled」を反転 Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click Me.Panel1.Enabled = Not (Me.Panel1.Enabled) End Sub 'チェックボックスの「Checked」をパネルの「Enabled」に設定 Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged Me.TextBox1.Enabled = Me.CheckBox1.Checked End Sub Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged Me.TextBox2.Enabled = Me.CheckBox2.Checked End Sub Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged Me.TextBox3.Enabled = Me.CheckBox3.Checked End Sub Private Sub CheckBox4_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox4.CheckedChanged Me.TextBox4.Enabled = Me.CheckBox4.Checked End Sub Private Sub CheckBox5_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox5.CheckedChanged Me.TextBox5.Enabled = Me.CheckBox5.Checked End Sub 'パネル上のテキストボックスをクリア Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 'パネルに貼ってある全てのコントロールを取得 For Each obj In Me.Panel1.Controls If TypeOf obj Is TextBox Then 'コントロールが TextBox の場合、Textクリア DirectCast(obj, TextBox).Text = "" End If Next End Sub End Class
これを実行すると以下の様な表示になります。 左側は1個目と2個目、4個目のテキストボックスに値を入力した後で、ボタンをクリックしてパネルを Disabled にした状態です。
その後、「Panel 上の TextBox クリア」のボタンをクリックした様子が右側の図となります。関連する記事
⇒標準コントロールのパネルの使い方について2(複数Panelの表示切替)
⇒パネル上にピクチャボックスを貼付て画像スクロールさせる方法ついて(Panel、PictureBox)