ラベル NetAdvantage の投稿を表示しています。 すべての投稿を表示
ラベル NetAdvantage の投稿を表示しています。 すべての投稿を表示

2012年12月5日水曜日

NetAdvantage(WinForms) AppStylist,MDI,DataBindingを同時に使用する場合の処理

NetAdvantageAppStylistは簡単な設定でアプリケーション全体の外観を変更できるとても便利なツールです。
デザインツールも付属しているので,自分でデザインするのも良いですが,予めスタイル情報ファイルもいくつか用意されているので,手間無くユーザーに外観の選択肢を提供できます。
外観を変更すると,まるで別のアプリケーションを見ているようで新鮮です。
個性の問題だけなく,ユーザーによっては「グリッドの行がストライプのほうが良い」などの要望もありますので,利便性の向上にもつながります。

しかし,MDIアプリケーションでデータバインディングを使ったフォームを使用する場合は注意が必要です。
この場合データバインディングが正しく動作せず,データソースを更新してもエディター系コントロールに反映されません。これは既知の問題であるらしく,この不可解な現象を解決しようと多大な時間をかけることになるかもしれません。
(いかなる条件でも問題が発生するかどうかは分かりませんが,UltraWinGridをマルチバンドで使用し,かつEditorコントロールのDataBindingsを設定した場合は発生しました)

解決のためには,AppStylistを使用しないか,あるいは以下のようにフォームのインスタンスを生成する度にAppStylistをリセットする必要があります。
リセットしたからといって処理にひどく時間がかかったり,表示がちらついたりということはないのですが,フォーム生成の都度リセットを忘れないよう注意が必要です。

Private Sub ShowForm()

    Infragistics.Win.AppStyling.StyleManager.Reset()
    Dim frm1 As New Windows.Forms.Form
    Infragistics.Win.AppStyling.StyleManager.Load("スタイル情報ファイルのパス")

    frm1.MdiParent = Me
    frm1.Show()

End Sub

2012年5月24日木曜日

UltraGridを方向キーでExcelライクに操作する

InfragisticsのNetAdvantage WinFormに含まれるUltraGrid。
とても高機能で便利なのですが,Excelみたいに方向キーで操作したいと思うとコードを追加する必要があります。
グレープシティのSPREADほどExcelライクというわけではないけれど,伝票系の入力画面を作るときなどに重宝します。



Imports Infragistics.Win.UltraWinGrid

Private Sub grid1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles grid1.KeyDown

    Dim gd As UltraGrid = grid1

    Select Case e.KeyCode
        Case Windows.Forms.Keys.Up
            gd.PerformAction(UltraGridAction.EnterEditMode, False, False)
            gd.PerformAction(UltraGridAction.AboveCell, False, False)
            e.Handled = True
            gd.PerformAction(UltraGridAction.EnterEditMode, False, False)
        Case Windows.Forms.Keys.Down
            gd.PerformAction(UltraGridAction.ExitEditMode, False, False)
            gd.PerformAction(UltraGridAction.BelowCell, False, False)
            e.Handled = True
            gd.PerformAction(UltraGridAction.EnterEditMode, False, False)
        Case Windows.Forms.Keys.Right
            gd.PerformAction(UltraGridAction.ExitEditMode, False, False)
            gd.PerformAction(UltraGridAction.NextCellByTab, False, False)
            e.Handled = True
            gd.PerformAction(UltraGridAction.EnterEditMode, False, False)
        Case Windows.Forms.Keys.Left
            gd.PerformAction(UltraGridAction.ExitEditMode, False, False)
            gd.PerformAction(UltraGridAction.PrevCellByTab, False, False)
            e.Handled = True
            gd.PerformAction(UltraGridAction.EnterEditMode, False, False)
        Case Windows.Forms.Keys.Enter
            gd.PerformAction(UltraGridAction.ExitEditMode, False, False)
            gd.PerformAction(UltraGridAction.BelowCell, False, False)
            e.Handled = True
            gd.PerformAction(UltraGridAction.EnterEditMode, False, False)
    End Select

End Sub

2011年8月5日金曜日

NetAdvantageのTextEditorのコントロール名を取得する

あるコントロールにフォーカスがあるときに何らかのキーを押すと,フォーカスが移動するとかいう機能はよく必要になりますが,NetAdvantageのTextEditorのコントロール名を取得するときはちょっと気をつける点があります。
このコントロールは親コントロールにコントロール名が収納されているため、コントロール名はControl.Parent.Nameから取得できます。普通にControl.Nameでは取得できません。
最初このことを知らずに長い時間を費やしてしまいました。
以下はF12を押した際にアクティブコントロール名を取得するコード例です。


'UltraTextEditorのコントロール名取得

Select Case e.KeyCode

    Case Keys.F12

        Dim controlName As String = Nothing

        If ActiveControl.Parent.Name = Me.Name Then
            '親コントロールのコントロール名が取得できない場合(普通のコントロール)
            controlName = ActiveControl.Name
        Else
            '親コントロールのコントロール名が取得できる場合
            controlName = ActiveControl.Parent.Name
        End If

        MsgBox("Active: " & controlName)

End Select