SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(PlusPak)

.NETアプリで使えるオリジナルデザインのコントロールを作成する

PlusPak for Windows Forms 5.0Jでカスタムデザインのコントロールを作る

  • X ポスト
  • このエントリーをはてなブックマークに追加

CapsLockの制御

 PlusPak for Windows Forms 5.0Jの面白いコントロールの1つに、「GcKeyLock」コントロールがあります。

 このコントロールは、キーボードにある「CapsLock」「NumLock」「ScrollLock」の3つのキーのオン・オフをプログラムから制御します。昔、N88Basicでも制御できましたが、PlusPak for Windows Forms 5.0Jではこの機能をコントロールにまとめました。

 各キーの制御は、それぞれ「CapsLock」「NumLock」「ScrollLock」プロパティを使用します。設定値はいずれも論理値で、「True」でオン、「False」でオフになります。

 このプログラムでは、TextBoxとGcLabelを配置し、次のような機能を組み込んでみました。

  1. TextBoxをクリックすると、CapsLockがオンになる
  2. フォームをクリックすると、CapsLockがオフになる
  3. GcLabelをクリックすると、CapsLockのオン・オフを設定できる
  4. CapsLockがオンになると、GcLabelの背景がグラデーションで塗りつぶされる
  5. CapsLockがオフの時は、GcLabelの背景と文字がグレー表示になる

 PlusPak for Windows Forms 5.0Jの各コントロールは、基本的にVS標準コントロールと同じようなイベントハンドラを使うことができます。そこで、チェックボックスをチェックしてハート型のボタンを押すと、テキストボックスに入力した文字を メッセージボックスで表示する機能も組み込みました。

 また、コードからグラデーションを設定する場合は、GradientEffectクラスのコンストラクタを使用してインスタンスを作成し、各コントロールのGradientEffectプロパティに設定します。コンストラクタでは、グラデーションの方向と開始・終了色を引数に設定します。

Visual Basic
Private Sub GcShapeButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GcShapeButton1.Click
    If Me.GcCheckBox1.Checked = True Then
        MessageBox.Show(Me.TextBox1.Text)
    End If
End Sub

Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
    Me.GcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.On
    Me.GcLabel2.ForeColor = Color.Black
    Me.GcLabel2.GradientEffect = New GrapeCity.Win.Common.GradientEffect _
                                    (GrapeCity.Win.Common.GradientStyle.Horizontal, _
                                     GrapeCity.Win.Common.GradientDirection.Forward, _
                                     Color.MistyRose, Color.LightCoral)
End Sub

Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
    Me.GcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.Off
    Me.GcLabel2.ForeColor = SystemColors.ControlDark
    Me.GcLabel2.GradientEffect = Nothing
End Sub

Private Sub GcLabel2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GcLabel2.Click
    If Me.GcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.Off Then
        Me.GcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.On

        Me.GcLabel2.ForeColor = Color.Black
        Me.GcLabel2.GradientEffect = New GrapeCity.Win.Common.GradientEffect _
                                        (GrapeCity.Win.Common.GradientStyle.Horizontal, _
                                         GrapeCity.Win.Common.GradientDirection.Center, _
                                         Color.MistyRose, Color.LightCoral)

    Else
        Me.GcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.Off
        Me.GcLabel2.ForeColor = SystemColors.ControlDark
        Me.GcLabel2.GradientEffect = Nothing
    End If
End Sub
c#
private void gcShapeButton1_Click(object sender, EventArgs e)
{
    if(gcCheckBox1.Checked == true){
        MessageBox.Show(textBox1.Text);
    }
}

private void gcLabel2_Click(object sender, EventArgs e)
{
    if(gcKeyLock1.CapsLock == GrapeCity.Win.Components.LockKeyStatus.Off){
        gcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.On;
        gcLabel2.ForeColor = Color.Black;
        gcLabel2.GradientEffect = new GrapeCity.Win.Common.GradientEffect 
                                        (GrapeCity.Win.Common.GradientStyle.Horizontal, 
                                         GrapeCity.Win.Common.GradientDirection.Center, 
                                         Color.MistyRose, Color.LightCoral);

    }else{
        gcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.Off;
        gcLabel2.ForeColor = SystemColors.ControlDark;
        gcLabel2.GradientEffect = null;
    }
}

private void textBox1_Click(object sender, EventArgs e)
{
    gcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.On;
    gcLabel2.ForeColor = Color.Black;
    gcLabel2.GradientEffect = new GrapeCity.Win.Common.GradientEffect
                                     (GrapeCity.Win.Common.GradientStyle.Horizontal,
                                     GrapeCity.Win.Common.GradientDirection.Forward,
                                     Color.MistyRose, Color.LightCoral);
}

private void Form1_Click(object sender, EventArgs e)
{
    gcKeyLock1.CapsLock = GrapeCity.Win.Components.LockKeyStatus.Off;
    gcLabel2.ForeColor = SystemColors.ControlDark;
    gcLabel2.GradientEffect = null;
}

まとめ

 今回使用したPlusPakのコントロールは4つだけですが、これだけでも雰囲気の違うフォームがデザインできたと思います。CapsLockをプログラム側でオンオフできる機能は、英字入力を多用するアプリケーションでは、かなり便利な機能だと言えます。

 今回は、独自グラフィックス作成にPowerPointを使用しましたが、PhotoShopなどの専用ソフトを使えば、もっと凝ったデザインのボタンにできるでしょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(PlusPak)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3087 2009/03/17 12:11

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング