SHOEISHA iD

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

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

顧客と開発者の生産性を格段に向上させる、業務システムの画面UI(AD)

高解像度ディスプレイにも対応! 画面レイアウト自在のPlusPakでひとつ上のフォームを作ろう

顧客と開発者の生産性を格段に向上させる、業務システムの画面UI 第3回

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

 前回の「JPAddressを用いて、さらに優れた住所入力フォームを作成しよう」ではJPAddressとPlusPakを組み合わせて、郵便バーコードを活用する方法を紹介しました。PlusPakによりJPAddressの機能がさらに向上しましたが、今回はPlusPakに焦点をあてて、文字通りアプリケーションの価値をプラスする事例を紹介していきます。

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

サンプルファイル

 本記事にアップロードしているサンプルファイルは、GitHubでも公開しています。

今回紹介するコンポーネント

 本記事では主にPlusPakについて解説しますが、組み合わせの例としてその他のコンポーネントについても言及しますので、以下にそれらの概要も紹介します。

PlusPak

 PlusPakは、グレープシティ社の提供するレイアウトやUI作成、バーコードやPDFのデータ出力を支援するコンポーネントです。

 画面のリサイズやレイアウト、タブコントロール、カレンダーなど業務アプリケーションの機能を拡張するコンポーネントを、同社のその他コンポーネントや、.NET標準のコントロールと組み合わせることで機能追加、使いやすさを実現します。

MultiRow

 MultiRowは、複雑な構成や複数行のフォームを簡単に作成できるコンポーネントです。そのため、入力項目や情報量が多い場合に、MultiRowを使用するケースが多いでしょう。そのような場合に、PlusPakのリサイズ機能による画面に合わせた項目表示の調整が効果的に作用します。

対象読者

 Visual Studioを利用してアプリケーションを作成した経験がある、またはC#、Visual Basicなどの.NET系言語での開発経験がある方。

必要な環境

 PlusPak for Windows Forms 8.0J およびその他コンポーネントを利用するには以下の環境が必要となります。

  • Visual Studio 2010/2012/2013/2015 日本語版
  • .NET Framework 3.5 SP1/3.5 Client Profile/4/4 Client Profile/4.5/4.5.1/4.5.2/4.6/4.6.1

 本記事はVisual Studio 2015 Enterprise、.NET Framework 4.6環境で画像キャプチャーの取得、動作検証を行っております。

コンポーネントの導入

 PlusPakおよびMultiRowの導入については過去の記事「JPAddressを用いて、さらに優れた住所入力フォームを作成しよう」を参照ください。

コントロールの追加

 利用したいコントロールがツールボックスに表示されていない場合の追加方法を紹介します。

 今回のように別途インストールした製品のコントロールは、以下に紹介するような追加の作業が必要な場合があります。

 Visual Studioの上部メニューから「ツール」→「ツールボックスアイテムの選択」をクリックします。

ツールボックスアイテムの選択
ツールボックスアイテムの選択

 「.NET Framework コンポーネント」タブを選択し、必要なコントロールにチェックを入れ、右下の「OK」ボタンをクリックすることでツールボックスにコントロールが追加されます。

 今回はGcResizeコントロールにチェックを入れて追加します。

追加するコントロールを選択する
追加するコントロールを選択する
GcResizeが追加された
GcResizeが追加された

画面解像度の異なる端末での運用をサポートする(1)

 PC用のディスプレイの高解像度化、タブレット端末の普及に合わせて、アプリケーションにも複数の解像度への対応が求められるようになっていきました。新しい開発プラットフォームのUniversal Windows Platform(UWP)などであれば、解像度の変化に合わせたレイアウト用のコントロールや仕掛けが用意されていますが、Windowsフォームアプリケーションでは通常、手間をかけた作りこみが必要になります。

 PlusPakを用いれば、レイアウトの自動拡大や、タブやアコーディオンを用いた表示情報の整理が簡単に行なえます。

GcResize

 GcResizeはウィンドウ幅に合わせたリサイズを提供します。

 通常、Windowsフォームアプリケーションのウィンドウ幅を変更しても配置されたコントロールは変化しません(親コンテナとドッキングさせている場合を除いて)。

ウィンドウ拡大前
ウィンドウ拡大前
標準だとウィンドウサイズを変更してもコントロールはリサイズされない
標準だとウィンドウサイズを変更してもコントロールはリサイズされない

 GcResizeを利用すると、ウィンドウサイズの変更に合わせて配置されたコントロールも拡大されます。

GcResizeを利用した場合コントロールも拡大される
GcResizeを利用した場合コントロールも拡大される

 画面上に複数のコントロールを配置した場合も、バランスを維持したまま拡大されます。

複数のコントロールが配置されている場合も、バランスを維持して拡大される
複数のコントロールが配置されている場合も、バランスを維持して拡大される

GcResizeの追加方法

 GcResizeを使用する方法は簡単です。

 上記「コントロールの追加」項目に従いGcResizeをツールボックスに追加します。

 フォーム上にGcResizeをドロップすることで、配置された全てのコントロールが自動でリサイズされるようになります。

レイアウトだけリサイズする

 標準の設定では、GcResizeを適用することで、レイアウトとフォントサイズがリサイズされるようになります。

 フォントサイズを変更したくない場合は、設定したいコントロールを選択、「gcResize1のResizeMode」プロパティをLayoutに変更します。

フォントはリサイズしない場合
フォントはリサイズしない場合

リサイズポリシーの追加

 GcResizeを利用しても正しいリサイズ結果が得られないコントロールは、リサイズポリシーを追加することで適切なリサイズが行えるようになります。

 今回はGcMultiRowのリサイズポリシーを利用します。リサイズポリシーを利用しない場合、アプリケーションを横に拡大しても1番右端の列が拡大されるだけですが、GcMultiRowのリサイズポリシーを適用すると全体が均等に拡大されます。

リサイズポリシーを適用しない場合
リサイズポリシーを適用しない場合
リサイズポリシーを適用した場合
リサイズポリシーを適用した場合

 リサイズポリシーは以下の方法で追加できます。

 ソリューションエクスプローラ上で右クリックから「追加」→「新しい項目」をクリックします。

新しい項目の追加
新しい項目の追加

 左ナビの「PlusPack for Windows Forms 8.0」をクリックします。

「PlusPack for Windows Forms 8.0」をクリック
「PlusPack for Windows Forms 8.0」をクリック

 GcMultiRowRisizePolicy8.0を選択して「追加」をクリックします。

GcMultiRowRisizePolicy8.0を追加
GcMultiRowRisizePolicy8.0を追加

 追加されたリサイズポリシーをGcResizeコントロールに適用します。

 Form1.cs上に配置したGcResizeをクリックします(表示名はgcResize1)。

 右上の三角マーク(スマートタグ)をクリックし「リサイズポリシーの編集」をクリックします。

リサイズポリシーの編集
リサイズポリシーの編集

 左下の「カスタムポリシーの追加」をクリックします。

カスタムポリシーの追加
カスタムポリシーの追加

 リストの1番下にGcMuliRowResizePolicyが追加されました(もし追加されない場合はプロジェクトをビルドした後、「リサイズポリシーの編集」をクリックしてください)。

リサイズポリシーが追加された
リサイズポリシーが追加された

GcTableLayoutContainer

 GcResizeはフォームにドロップするだけで簡単に配置されたコントロールのリサイズを可能にしました。しかし、アプリケーションによっては、メインの情報はリサイズしたいが、左側のナビゲーションはリサイズしても幅を変えたくない場合があります。そのようなケースでは、GcTableLayoutContainerが柔軟なテーブル形式のレイアウトを提供します。

GcTableLayoutContainerでテーブル形式のレイアウトを行う
GcTableLayoutContainerでテーブル形式のレイアウトを行う

GcTableLayoutContainerの追加方法

 上記「コントロールの追加」項目に従いGcTableLayoutContainerをツールボックスに追加します。

 フォーム上にGcTableLayoutContainerをドロップすると「テーブルレイアウトのパターン」ポップアップウィンドウが起動します。

テーブルレイアウトのパターン
テーブルレイアウトのパターン

 パターン1を選択して、右下の「OK」ボタンをクリックします。

パターン1を選択
パターン1を選択

 フォーム上にGcTableLayoutContainerが配置されました。

GcTableLayoutContainerを配置
GcTableLayoutContainerを配置

 コントロール右上の三角マーク(スマートタグ)をクリックし「親コンテナーにドッキングする」をクリックします。

親コンテナーとドッキングする
親コンテナーとドッキングする

 これで親コンテナー(今回の場合はフォーム)にあわせてレイアウトが変更されるようになります。

GcTableLayoutContainerの区切りを調整

 配置したGcTableLayoutContainerのレイアウトを調整します。

 今回は左側に固定幅のナビゲーションを配置して、右側にメインのコンテンツを配置し、こちらは画面幅に合わせて拡大するようにします。

 GcTableLayoutContainerの左上の50と書かれた数字をクリックします。

一行目を選択
一行目を選択

 これで横の一行目を選択した状態になります。今回は、横行は不要なので、右クリックから「削除」を選択します。

横行を削除
横行を削除

 画面上部の列の分割は、左側が100という値、右側が100%という割合になっていることに注目してください。これは左側の幅が100という固定の値で、右側が残り100%という、アプリケーションのウィンドウサイズによって変化する可変の値という意味です。

コントロールの配置

 左列にListViewを、右列にGcMultiRowコントロールを配置します。

 GcMultiRow側は自動で幅が変わるようにAllowAutoExtendをTrueに設定します。

 アプリケーションをデバッグ実行して、ウィンドウサイズを変更すると、右列に配置したGcMultiRowだけが拡大されることが確認できます。

 このようにGcResizeやGcTableLayoutContainerを利用することで、異なる画面サイズの環境に合わせた表示を行うことが可能になります。

画面解像度の異なる端末での運用をサポートする(2)

 続いて、タブやアコーディオンを用いて、1つの画面に表示する情報を切り替える方法を紹介します。

GcTabControl

 Windowsフォームには標準でTabControlが存在し、簡単なタブ機能を実装することはできますが、デザインや動作をカスタマイズするにはそれなりの工数が必要になります。GcTabControlは標準のTabControlにはない柔軟なカスタマイズ性を提供してくれます。

 以下の画像は初期状態のTabControlとGcTabControlです。

 タブの文字が異なるものの、それ以外はほぼおなじ見た目です。

TabControlとGcTabControl
TabControlとGcTabControl

 違いがわかるのは、コントロール右上のスマートタグをクリックした際です。それぞれの表示項目を見てみましょう。

TabControlのスマートタグ
TabControlのスマートタグ
GcTabControlのスマートタグ
GcTabControlのスマートタグ

デザイナからのカスタマイズ

 スタイルの変更や、タブの配置位置、複数段表示などスマートタグからさまざまな項目を変更できることが確認できます。画面のカスタマイズがコードを書かずにデザイナから行えるというのは便利なポイントです。

 カスタマイズについてもう少し具体的に見ていきます。スマートタグの「デザイナ」をクリックしてエディタを開きます。

GcTabcontrolのデザイナ
GcTabcontrolのデザイナ

 左側のメニューの「表示」では、タブの見た目を選択できます。豊富に用意されたパターンから選択することでタブの見た目を変更することができます。

タブの見た目を変更する
タブの見た目を変更する

 「配置」はタブの表示位置や、テキストの方向を指定できます。

タブの配置
タブの配置

 「閉じるボタン」からは、タブを閉じるためのアイコンを、「レイアウト」からは、タブの複数段表示などが設定でき、多くの情報を表示、整理する必要があるアプリケーションの作成を可能にします。

GcAccordionContainer

 GcAccordionContainerは展開可能なアコーディオンメニューを実現できるコントロールです。

GcAccordionContainer
GcAccordionContainer

 先述のGcTabControl同様、1つの画面に表示する情報を整理することが可能なコントロールです。

GcAccordionContainerの構成

 GcAccordionContainerはコンテナーという名前から分かる通り、複数のアイテムを内包します。

 上の画像では色分けされたそれぞれの長方形がGcAccordionItemというアイテムに相当し、独立して展開、折りたたみを行うことも、連携して1つのアイテムだけが展開する構成にもできます。

 展開しているアイテムを1つに制限したい場合は、スマートタグの展開方法をSingleに設定します。

展開するアイテムを1つに制限する
展開するアイテムを1つに制限する

まとめ

 PlusPakのレイアウト系コントロールの中から、4つ紹介しました。

 これらのコントロールはMultiRowを利用するような、情報量の多い画面を整理して使いやすくする場合などに、より有効に活用できるでしょう。

補足情報の表示やファンクションキーの活用で入力をサポートする

GcBalloonTip

 GcBalloonTipは補助的な説明や、入力のエラー内容などを伝えるためのバルーンチップを表示することができます。

GcBalloonTip
GcBalloonTip

GcBalloonTipの利用方法

 GcBalloonTipは以下の手順で利用します。

 本記事の「コントロールの追加」項目に従いGcBalloonTipをツールボックスに追加します。

 バルーンチップを表示したいコントロールにGcBalloonTipをドロップします。今回はTextBoxに追加する例を紹介します。

 TextBoxのスマートタグにバルーンチップの項目が追加されているので、「gcBalloonTip1により追加する・・・」をクリックします(gcBalloonTip1は自動的に追加されるNameプロパティで異なる場合があります)。

スマートタグにバルーンチップの項目が追加される
スマートタグにバルーンチップの項目が追加される

 マウスオーバーで自動的に表示するにはAutoShowプロパティをTrueに設定します。

 Textプロパティを「名前を入力してください」と設定します。

バルーンチップエディタ
バルーンチップエディタ

 アプリケーションをデバッグ実行して、TextBoxにマウスオーバーするとバルーンチップの表示が確認できます。

柔軟な表示カスタマイズ

 GcBalloonTipもデザイナから起動するエディタで柔軟なカスタマイズが行えるのが魅力です。

 バルーンチップの枠の形状、表示するフォントだけでなく、アイコンをエラーや警告だけでなく、自前のオリジナルアイコンに変更することも可能です。

GcBalloonTipをエディタから編集する
GcBalloonTipをエディタから編集する

GcFunctionKey

 GcFunctionKeyは画面上にショートカットキーを表示し、表示したショートカットキーに対するアクションを呼び出すことができるコントロールです。

GcFunctionKey
GcFunctionKey

GcFunctionKeyの利用方法

 GcFunctionKeyを利用するには以下のように行います。

 本記事の「コントロールの追加」項目に従いGcFunctionKeyをツールボックスに追加します。

 フォーム上にツールボックスのGcFunctionKeyをドロップします。

 スマートタグが自動で表示されるので「標準のキーセットを挿入」をクリックします。

標準のキーセットを挿入
標準のキーセットを挿入

 画像では右側にはみ出したキーが表示されていませんが、これでF1からF12に対応したファンクションキーが画面に表示されました。

F1からF12のファンクションキーが追加された
F1からF12のファンクションキーが追加された

 この状態では、ファンクションキーの入力を拾っても何も処理を指定していないので、ファンクションキー入力イベントに対する処理を追加します。

 フォームに追加したGcFunctionKeyコントロールをダブルクリックするとForm1.csにgcFunctionKey1_FunctionKeyDownイベントハンドラーが自動で追加されます。

 今回はF1キーが押された場合にメッセージダイアログを表示し、F1からF12キーが押された場合にラベルに文字を表示するようにします。

GcFunctionKeyのイベントハンドラー
private void gcFunctionKey1_FunctionKeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F1)
    {
        MessageBox.Show("F1キーが押されました");
    }
    this.label2.Text = e.KeyCode.ToString();
}

 画面にlabel2というNameプロパティを持つLabelコントロールが配置されているものとします。

 アプリケーションをデバッグ実行し、F1からF12キーを押してラベルの内容を確認します。また、追加したF1からF12キー以外ではgcFunctionKey1_FunctionKeyDownイベントハンドラーが呼び出されないことも確認してみてください。

まとめ

 ここではバルーンチップとファンクションキー対応を行い、入力処理をサポートするコントロール、GcBalloonTipとGcFunctionKeyを紹介しました。

 データ入力系のアプリケーションを作りこむ上で、バルーンチップやファンクションキーの対応まで手が回らないことが多いはずです。そのような案件でカスタマイズも可能で、設定も容易なGcBalloonTipやGcFunctionKeyを利用することで、アプリケーションの提案の幅を広げることができます。

その他PlusPakのコントロール

 今回紹介した以外にも、PlusPakで利用できるさまざまな機能を簡単に紹介します。

 PlusPakを上手く活用するためには、製品に含まれる機能全体を把握しておくことも有益です。以下の紹介を記憶の片隅に置いていただけると、ちょっとした便利な機能をシステムに組み込みたい時に、役に立つことがあるはずです。

GcCalculator

 電卓機能をアプリケーションに追加することができます。

GcCalculator
GcCalculator

GcCalendar

 カレンダーによる日付選択や、予定やその日のメモを表示できる機能を提供するコントロールです。

GcCalendar
GcCalendar

GcColorPicker

 スポイト付きのカラーピッカーを追加できるコントロールです。

GcColorPicker
GcColorPicker

GcBarCode

 「JPAddressを用いて、さらに優れた住所入力フォームを作成しよう」で郵便バーコードを出力する機能を紹介しましたが、それ以外の形式のバーコード出力も可能です。

GcBarCode
GcBarCode

PlusPakは道具箱に入れておきたい製品

 PlusPakを組み合わせることで、複数の解像度への対応や、入力の補助を得られることを紹介しました。

 紹介しながら実感したことは、多くの機能がコーディング無しで実現できてしまう便利さです。画面の表示に関わることはデザイナ上でできるという自然さももちろんですが、コーディングの量が減ることで単純に工数やプログラムの複雑さを削減することができます。もちろん、コーディングしなければいけない場面はあるのですが、コーディングが必要になるラインが標準のコントロールだけで実装する場合と比べると格段に引き上げられます。

 加えて、最後に紹介したカレンダー、電卓、バーコードといった機能は多くの方が要求された経験のある機能でしょう。そのような場合にPlusPakを利用することで工期・工数を削減しつつ機能を提供できるように体験版に触れ、概要を理解しておくことは、無理なく実装できる範囲に機能を落としこむのにも役立つでしょう。

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

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

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング