勝利フォームのリストビューのトップアイテムのプロパティが変更されたときに発生するイベントはありますか?Winforms ListView TopItem changedイベント?
1
A
答えて
1
特にTopItem
プロパティのイベントはありません。しかし、以前のTopItem
の結果をキャッシュして、項目の並べ替えの指標である他のイベント(例えば、Paint
とDrawItem
)と比較することで、同じ効果を得ることができます。
private void WatchTopItemChanged(ListView listView, Action callOnChanged) {
var lastTopItem = listView.TopItem;
listView.DrawItem += delegate {
if (lastTopItem != listView.TopItem) {
lastTopItem = listView.TopItem;
callOnChanged();
}
};
}
2
TopItemが変更された可能性があることを検出するには、Scrollイベントが必要です。 ListViewには1つもありません。おそらく意図的なものですが、このクラスにはネイティブのWindowsコントロールのバグやスクロールを使用するハックを回避するいくつかのハッキングが含まれています。
これらのハッキングは、TopItemの変更のみを探すため、大したことではありません。 WndProc()メソッドをオーバーライドして、LVN_ENDSCROLLメッセージを取得できるようにします。これはうまくいきましたが、私はそれを完全にテストしませんでした。プロジェクトに新しいクラスを追加し、下にコードを貼り付けます。コンパイル。新しいコントロールをツールボックスの上部からフォームにドロップします。 TopItemChangedイベントを実装します。
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
class MyListView : ListView {
public event EventHandler TopItemChanged;
protected virtual void OnTopItemChanged(EventArgs e) {
var handler = TopItemChanged;
if (handler != null) handler(this, e);
}
protected override void WndProc(ref Message m) {
// Trap LVN_ENDSCROLL, delivered with a WM_REFLECT + WM_NOTIFY message
if (m.Msg == 0x204e) {
var notify = (NMHDR)Marshal.PtrToStructure(m.LParam, typeof(NMHDR));
if (notify.code == -181 && !this.TopItem.Equals(lastTopItem)) {
OnTopItemChanged(EventArgs.Empty);
lastTopItem = this.TopItem;
}
}
base.WndProc(ref m);
}
private ListViewItem lastTopItem = null;
private struct NMHDR {
public IntPtr hwndFrom;
public IntPtr idFrom;
public int code;
}
}
関連する問題
- 1. TreeView Items changedイベント
- 2. セレクションChangedイベントは
- 3. ドロップダウンのタイムアウトselectindex changedイベント
- 4. ASP ListView to Winforms
- 5. DOM ChangedイベントFirefox拡張機能
- 6. DropDownList selected index changed jQueryダイアログ内のイベント
- 7. アロハ・エディタ "aloha-smart-content-changed"イベントを聞く?
- 8. VB.NET WinForms ListView質問
- 9. WinForms Navigatedイベント
- 10. 「グローバル」WinFormsイベント
- 11. WinformsのWPFイベント
- 12. .NET WinForms ListView Selected Item Not Highghghted
- 13. WinForms ListViewのカスタムソートの実装
- 14. WinForms ListView滑らかなスクロール
- 15. Winforms ListView選択図面?
- 16. TextBoxフォーカスのWinFormsイベント?
- 17. ListView ItemCheckedイベント
- 18. Nativescript ListView onItemLoadingイベント
- 19. android listview checkboxイベント
- 20. イベントxxforms-value-changedで値を取得する方法は?
- 21. WPFでDatagrid selection changedイベントをキャンセルするには?
- 22. Obout Combobox selected Index changedイベントが動作しない
- 23. WinForms ListViewの変数の高さの行ListView
- 24. winforms listviewのテキストの一部を選択
- 25. アプリケーション終了イベントのキャプチャ - WinForms
- 26. WinForms TreeView紛失イベントのチェック
- 27. XamarinフォームListView onpressingイベント
- 28. C#ListView - コントロールcheckBoxイベント
- 29. "ListView"の "TopItem"プロパティを割り当てるC#/ Visual Studio 2008が動作しません。
- 30. winforms keydownイベントが動作しない