1

Winフォームアプリでは、2つのリストビューを使用して2つのファイルを比較しています。ユーザーがフォルダブラウザを使用して2つのファイルを選択すると、ファイルはリストビューにロードされます。一致しないファイルと行を比較すると、異なる色で表示されます。これは絶対にうまくいきます。これで、一方のリストビューをスクロールするときに、もう一方のリストビューも同じ量でスクロールする必要があります。試しましたが、リストビューの水平スクロールまたは垂直スクロールのプロパティを設定できません。これどうやってするの ?前もって感謝します。

4

3 に答える 3

2

カスタムリストビューを作成して、スクロールを検出し、スクロールメッセージを他のテキストボックスに渡して、同期してスクロールできるようにする必要があります。

 class SyncListView: ListView
{
    public SyncListView()
    {
    }

    public Control Buddy { get; set; }

    private static bool scrolling;   // In case buddy tries to scroll us

    protected override void WndProc(ref Message m) 
    {
    base.WndProc(ref m);
    // Trap WM_VSCROLL message and pass to buddy
    if ((m.Msg == 0x115 || m.Msg == 0x20a) && !scrolling && Buddy != null && Buddy.IsHandleCreated)
    {
        scrolling = true;
        SendMessage(Buddy.Handle, m.Msg, m.WParam, m.LParam);
        scrolling = false;
    }
}

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

}
于 2013-02-11T04:57:40.140 に答える
0

マネージド コードのみを使用して、 Better ListViewまたはBetter ListView Expressでこれを行うこともできます。

public class CustomListView : BetterListView
{
    public void SynchronizeScroll(BetterListView listView)
    {
        VScrollBar.Value = listView.VScrollProperties.Value;
    }
}

VScrollPropertiesChanged イベントを次のように処理します。

    private void ListViewVScrollPropertiesChanged(object sender, BetterListViewScrollPropertiesChangedEventArgs eventArgs)
    {
        CustomListView listViewThis = (sender as CustomListView);

        listViewThis.SynchronizeScroll(this.listViewAnother);
    }
于 2013-02-16T15:19:00.900 に答える