2007年8月29日水曜日

伝票レイアウトセル(4) セル・ユーザーコントロール その1

伝票レイアウトセルで編集時に利用するユーザーコントロールの基本部分について。

このコントロールで必要になる機能というのが色々あるのよね。

  • 編集開始時に値からコントロールへと表示させる
  • 編集終了時にコントロール上の状態を値へと変換する
  • セルに表示するためのイメージキャプチャ

上二つは、簡単に書いてしまっているけど「キー制御をどうするか」という問題と密接にからんでいたりする。というのも、
業務APではよくある「Enterキーで次へ~」といった制御と絡んでくる問題と、もともとDataGridViewでもっている「編集終了=F2」の扱い。
Enterキーの方はここにとどまらない問題なので、それぞれのお仕事で決めて欲しいw

もう一つ、F2キーの対応でDataGridViewの流儀にのっとってF2=編集終了、とする場合はIDataGridViewEditingControl.EditingControlWantsInputKey
メソッドで「F2はDataGridView側で処理する(Return False)」するように書き換えてあげれば大丈夫だと思う。
自分の場合、どんなコントロールがセルの上で利用されるかが判断つかなかった、というのを優先したので
F2で編集終了という機能は外した。なので、違うセルにいかないと編集終了しませんw

それで実際に上二つを対応するとなると、イベントを発生させるやり方がベターかなと思うね。
イベントであればVisualStudioのIDE側で見て判るから。なのでこんな定義で。

''' <summary>インターフェースで設定された値をValuesプロパティに展開する必要がある際に発生します</summary>
''' <remarks>インターフェース上で入力された値を、Valuesプロパティに保持させる処理を行います。</remarks>
Public Event ConvertInterfaceToValues()

''' <summary>Valuesプロパティの値を元にインターフェースに表示をする必要がある際に発生します</summary>
''' <remarks>Valuesプロパティで保持されているセルの値を、サブエディタの画面上に展開する処理を行います。</remarks>
Public Event ConvertValuesToInterface()

あとはコレと対になるイベント用メソッドを用意しておく。んで、ここは.Netの流儀に従っておくといいかな。

''' <summary>Valuesプロパティで保持している値をインターフェース上に展開します</summary>
''' <remarks>ConvertValuesToInterfaceイベントを発生させます</remarks>
Protected Friend Overridable Sub OnConvertValuesToInterface()
    RaiseEvent ConvertValuesToInterface()
End Sub

''' <summary>インターフェース上の値をValuesプロパティに変換します</summary>
''' <remarks>ConvertInterfaceToValuesイベントを発生させます</remarks>
Protected Friend Overridable Sub OnConvertInterfaceToValues()
    RaiseEvent ConvertInterfaceToValues()
End Sub

コメントは下手なのであまり気にせずにw それとアクセス修飾子はProtected Friend としてあるけど、Protectedで本当は
問題なし。

これでイベントまでは下準備できたので、次はイメージのキャプチャな話を。

0 件のコメント:

コメントを投稿