當win窗體的listview top item屬性發生變化時,是否有任何事件觸發?Winforms ListView TopItem更改事件?
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
您需要一個Scroll事件才能檢測到TopItem可能已經改變。 ListView沒有一個。這可能是故意的,該類包含一些解決本地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. C#WinForms ListView項目數量更改事件
- 2. C#WinForms控制訂單更改事件
- 3. winforms datagridview計算字段更改事件
- 4. DateTimePicker更改值不會觸發值更改事件 - Winforms
- 5. .NET ListView:更改選擇後的事件
- 6. 在Windows 10中更改了winforms事件行爲嗎?
- 7. WPF ListView:更改ItemsSource不會更改ListView
- 8. 更改事件
- 9. 更改事件
- 10. Winforms Listview checkedItems missing
- 11. 在Winforms中自定義ListView?
- 12. 是否有一個listview控件的選擇更改事件?
- 13. 更改Android ListView組件
- 14. WinForms導航事件
- 15. Winforms - UserControl OnGotFocus事件
- 16. Winforms冒泡事件
- 17. C#的WinForms ListView的DoubleClick事件的任何地方
- 18. 更改的ListView
- 19. .Ico文件在EXE中更改 - .NET winforms
- 20. Textareafor更改事件
- 21. jquery更改事件
- 22. chrome.devtools.inspectedWindow更改事件
- 23. 更改OnActionExecuting事件
- 24. jquery更改事件
- 25. TextBox更改事件
- 26. 應該在哪裏處理listview中的數據更改事件?
- 27. 在itemCreated事件中由ListView創建的行的更改樣式
- 28. 當Xamarin ListView BindingContext項目發生更改時的事件
- 29. Windows 8商店應用程序XAML ListView滾動更改事件
- 30. 鼠標離開控件時Winforms事件