きおめも

VB.netを中心に情報の覚書です。

DataGridをスワイプでスクロールするとウィンドウが動く対策

DataGridをスワイプでスクロールするとデータの端まで行くとウィンドウが動く。

これに対処するにはDataGridのManipulationBoundaryFeedbackイベントを使うと回避できる。

    Private Sub dataGrid_ManipulationBoundaryFeedback(sender As Object, e As ManipulationBoundaryFeedbackEventArgs) Handles dataGrid.ManipulationBoundaryFeedback
        e.Handled = True
    End Sub


[参考]
ScrollViewerコントロールの挙動に関して
UIElement.ManipulationBoundaryFeedback イベント (System.Windows)

型拡張

データ型を拡張し任意の動作を追加する事が出来る。
引数の型で追加される型が決まるようだ。
※Object型には追加できなかった。

Module mdlExtension

    '内容を出力ウィンドウとイミデイトウィンドウに出す
    <Extension()>
    Public Sub Print(ByVal aString As String)
        Console.WriteLine(aString)
        Debug.Print(aString)
    End Sub

    'String→Double
    <Extension()>
    Public Function ToDouble(val As String) As Double

        Dim ret As Double = 0

        If Double.TryParse(val, ret) Then
            Return ret
        Else
            Return 0
        End If

    End Function

End Module

WPFめも

WPFについての情報ページのメモ。
※随時更新する

■基本情報
連載:WPF入門:第1回 いよいよWPFの時代。WPFの習得を始めよう (1/3) - @IT
WPFの各種コントロールのタッチパネルでの動作 - SourceChord


■データバインディング
サンプルコードを見ながら理解するMVVMの基礎的な実装 - Neutral Scent

方法 : INotifyPropertyChanged インターフェイスを実装する

※RelayCommandを使うには?
Visual Stdio 2013 では "Microsoft.TeamFoundation.Controls"の参照を加え,"Imports Microsoft.TeamFoundation.MVVM"をImportする。
RelayCommand クラス (Microsoft.TeamFoundation.MVVM)


■ListView
ListView で多段表示 - present

■DataGrid
DataGrid 多段で表示 WPF



■カテゴリ不明
ItemsControl 攻略 ~ 外観のカスタマイズ | grabacr.nét
grabacr.nét | PaaS (Patchouli as a Shachiku)

クラスの初期化

クラス作成時にプロパティの値に初期値をセットする方法

Public Class Person
    Public No As Integer
    Public Name As String
    Public BirthDay As DateTime
End Class

Private Sub main()

    '初期化
    Dim p As Person = New Person With {.No = 1, .Name = "Tanaka", .BirthDay = Now()}

End Sub

スレッド内からコントロール操作

Invoke関数をでデリゲートを指定する。

その際にラムダ式を使用するとコードがわかりやすくて便利。

Private Sub _threadProc()
    
    '操作をラムダ式で記述
    Me.Invoke(Sub()
                  Me.Textbox1.text = "hoge"
                  Me.Textbox2.text = "hogehoge"
              End Sub)

    '操作が1行の場合はEnd Subを省略できる。
     Me.Invoke(Sub() Me.Textbox1.text = "hoge")

End Sub

Lambda Expressions (Visual Basic)