- PR -

スプレッドのカスタムセルのキー制御について

1
投稿者投稿内容
ほそ
会議室デビュー日: 2007/08/16
投稿数: 2
投稿日時: 2007-08-16 18:58
お世話になっております。

初めての投稿をさせていただきます。

VB2005、Spread for .Net 2.5J、InputMan for .Net 4.0にて
開発を行っています。
パッチはどれも最新を当てています。

やりたいことは、スプレッドのテキスト型のセルで
MaxLengthをバイト指定したいことです。

現在、TextCellTypeを継承したカスタムセルを作成し、
エディタにInputManのEditコントロールを使用することによって回避しています。

ここで問題なのですが、
エディタを変更するとセルが編集モードに切り替わるときに
・1クッション空いてしまう(何かしらキーを打たないと編集モードに切り替わらない かつ 初めのキーは入力されない)
・Enterキーにて次のセルに移動したいが、移動しない。マッピングは編集時、非編集時ともに指定してあります。(非編集モードでは移動する。)

この2点がうまくいきません。
どなたかご存知の方ご教授お願いします。

ちなみに、継承セルを作成した理由のひとつとして、
なぜかスプレッドのKeyDownイベントがまったく発生しないということもあります。。。

カスタムセル:

Public Class TextBoxCellTypeEx
Inherits FarPoint.Win.Spread.CellType.TextCellType

Private WithEvents edt As New Edit
''' <summary>
''' セルが編集モードになったときのコントロールを返します。
''' </summary>
''' <returns>Editコントロール</returns>
Public Overrides Function GetEditorControl(ByVal appr As FarPoint.Win.Spread.Appearance, _
ByVal zoom As Single) As System.Windows.Forms.Control
Return edt
End Function

''' <summary>
''' 編集されたテキストをセルに反映させます。
''' </summary>
''' <returns></returns>
Public Overrides Function GetEditorValue() As Object
Return edt.Text
End Function

''' <summary>
''' 編集モードのコントロールにセルの値を渡します。
''' </summary>
''' <param name="value">セルの値。</param>
Public Overrides Sub SetEditorValue(ByVal value As Object)
edt.Text = value
End Sub

End Class

マッピング:

Private Sub frmSpread_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim im As New FarPoint.Win.Spread.InputMap()
'/// キー制御(非編集中)
im = FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused)
im.Put(New Keystroke(Keys.Enter, Keys.None), SpreadActions.MoveToNextColumnWrap)
im.Put(New Keystroke(Keys.Enter, Keys.Shift), SpreadActions.MoveToPreviousColumnWrap)
'/// キー制御(編集中)
im = FpSpread1.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
im.Put(New Keystroke(Keys.Enter, Keys.None), SpreadActions.MoveToNextColumnWrap)
im.Put(New Keystroke(Keys.Enter, Keys.Shift), SpreadActions.MoveToPreviousColumnWrap)

End Sub


[ メッセージ編集済み 編集者: ほそ 編集日時 2007-08-16 18:59 ]
ほそ
会議室デビュー日: 2007/08/16
投稿数: 2
投稿日時: 2007-08-16 19:24
自己レスです。

エディタにTextBoxをしていた場合、
問題なく動作しました・・・

InputManのコントロールだとうまくいかない・・・っぽい?です。

とりあえずはTextBoxのイベントを使用してバイト数を制限したいと思います。

でも、Editだとうまくいかないのは納得できないので
もう少し調べてみたいと思います。

よろしくお願いします!
1

スキルアップ/キャリアアップ(JOB@IT)