§12 ファイル処理(2)1 プログラミング実習
 back next 

 色は赤、緑、青の光の三原色で作られる。各色の明るさは0〜255の256段階で設定する。この三色を混ぜることで色を作成する。作成できる色数は16,777,216色(=256×256×256)である。この色見本を表示するプログラムを作成する。プログラム終了時に色のデータを保存し、起動時に読み込む。ここでは、ファイルからデータを行単位で読み書きする方法について学習する。

オブジェクト: 水平スクロールバー(HScrollBar)、ファイルのダイアログ(OpenFileDialog, SaveFileDialog)
   ↑ 「すべてのWindowsフォーム」にあり

実習12のデザイン スクロールバー

 

【1】 プログラム作成の準備

操作 1 Windowsアプリケーションを作成するためのプロジェクトを作成する。
 プロジェクト名は「実習12ファイル処理2」とする。

操作 2 フォーム(Form1)のプロパティを次のように設定する。

Text ファイル処理2

操作 3 上の図を参考にして、必要なオブジェクトを配置し、プロパティを設定する。

ラベル (Name) → lblColor、 Text → 色見本
(Name) → lblRed、 Text → 0
(Name) → lblGreen、 Text → 0
(Name) → lblBlue、 Text → 0
ピクチャボックス (Name) → PictureBox1、 BorderStyle → Fixed3D
ボタン (Name) → WSCButton、 Text → Webセーフカラー
(Name) → EndButton、 Text → 終 了
スクロールバー (Name) → hsbRed、 LargeChange → 51
(Name) → hsbGreen、 LargeChange → 51
(Name) → hsbBlue、 LargeChange → 51

操作 4 プログラムを保存する。 ( [ファイル(F)] → [すべてを保存(L)] )

操作 5 プログラムを実行する。

結果 どれを操作しても何も起こらない。

操作 6 [終了]ボタンに対応するメソッドを次のように作成する。[終了]ボタンをダブルクリックしてメソッドを用意する。

    Private Sub EndButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EndButton.Click
        Me.Close()
    End Sub

結果 [終了]ボタンをクリックするとプログラムが終了する。

 

【2】 スクロールバーと色作成

操作 7 スクロールバーの初期値を設定するため、Loadイベントに対応するメソッドを次のように作成する。フォームをダブルクリックしてメソッドを用意する。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        hsbRed.Maximum = 255 + hsbRed.LargeChange - 1    '最大値の設定
        hsbGreen.Maximum = 255 + hsbGreen.LargeChange - 1
        hsbBlue.Maximum = 255 + hsbBlue.LargeChange - 1
    End Sub

 スクロールバーで選択できる値の範囲を0〜255に設定する。範囲の最小値はMinimumプロパティ、最大値はMaximumプロパティに設定する。プロパティウィンドウで設定できるが、最大値は次のような計算が必要なのでプログラムで設定する。
  最大値 = 希望する最大値 + LargeChangeプロパティ - 1 

操作 8 スクロールバーを操作するとラベルに値が表示されるようにするため、Scrollイベントに対応するメソッドを次のように作成する。スクロールバー(hsbRed)をダブルクリックしてメソッドを用意する。

    Private Sub hsbRed_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles hsbRed.Scroll, hsbGreen.Scroll, hsbBlue.Scroll
        If sender.Equals(hsbRed) Then    '赤
            lblRed.Text = hsbRed.Value    '値表示
        ElseIf sender.Equals(hsbGreen) Then    '緑
            lblGreen.Text = hsbGreen.Value      '値表示
        ElseIf sender.Equals(hsbBlue) Then    '青
            lblBlue.Text = hsbBlue.Value        '値表示
        End If
    End Sub

 3つのスクロールバーのイベントをハンドルする(受け取る)ため、下線部のように緑と青のスクロールバーの分を追加する。これで、どのスクロールバーを操作してもこのメソッドが処理される。
 スクロールバーの判別は "sender.Equals(オブジェクト名)" で行っている。
 スクロールバーの値は、Valueプロパティで参照(設定)することができる。
結果 実行して、スクロールバーを操作すると、現在の値が表示される。

操作 9 スクロールバーで設定した値で、PictureBox1の色を設定し、色コードを16進数で表示するColorDispメソッドを次のように作成する。

    Private Sub ColorDisp()
        Dim colorCode As String
        '色設定
        PictureBox1.BackColor = Color.FromArgb(hsbRed.Value, hsbGreen.Value, hsbBlue.Value)
        '値表示
        lblRed.Text = hsbRed.Value
        lblGreen.Text = hsbGreen.Value
        lblBlue.Text = hsbBlue.Value
        '16進数変換
        colorCode = Microsoft.VisualBasic.Right("0" & Hex(hsbRed.Value), 2)
        colorCode = colorCode & Microsoft.VisualBasic.Right("0" & Hex(hsbGreen.Value), 2)
        colorCode = colorCode & Microsoft.VisualBasic.Right("0" & Hex(hsbBlue.Value), 2)
        lblColor.Text = "色見本=#" & colorCode
    End Sub

Color.FromArgb(赤, 緑, 青 )
 赤, 緑, 青 の各値から色を作成する。
Microsoft.VisualBasic.Right(文字列, 文字数 )
 文字列 の右端(末尾)から文字数 分だけの文字を取り出す。
Hex(値 ) Microsoft.VisualBasic.Hex()
 値 を16進数の文字列に変換する。

操作 10 スクロールバーを操作したときのhsbRed_Scrollメソッドを次のように変更する。

    Private Sub hsbRed_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles hsbRed.Scroll, hsbGreen.Scroll, hsbBlue.Scroll
        If sender.Equals(hsbRed) Then    '赤
            lblRed.Text = hsbRed.Value    '値表示
        ElseIf sender.Equals(hsbGreen) Then    '緑
            lblGreen.Text = hsbGreen.Value      '値表示
        ElseIf sender.Equals(hsbBlue) Then    '青
            lblBlue.Text = hsbBlue.Value        '値表示
        End If
        ColorDisp()
    End Sub

ColorDispメソッドでスクロールバーの値をラベルに表示させるので、このメソッドでの個別の表示プログラムは不要となる。
結果 実行して、スクロールバーを操作すると色と色コードが表示される。


 back next 
 §12 ファイル処理(2)1 Copyright©2008 Hiroshi Masuda 

 

 

inserted by FC2 system