![](/img/trans.png)
[英]How to programmatically sort an autogenerated column in wpf datagridview?
[英]invoke datagridview events in wpf programmatically
(初學者的問題,如有冒犯請繼續,否則歡迎您的輸入)
我試圖在 Wpf 代碼中調用 datagridview 事件。 實現事件調用很簡單。
例如:
dgv1.ColumnHeaderMouseClick+=delegate(
object sender, DataGridViewCellMouseEventArgs e)
{..code on event..};
我的問題:在代碼中的其他地方調用 dgv 事件的正確方法是什么。 (以編程方式按 header 列)。
謝謝
對我來說,更簡潔的方法是將自定義事件的方法分開。 像這樣的東西:
private void DataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
MessageBox.Show("Sorting was executed.");
}
然后將該方法設置為控件的事件屬性,如下所示:
dataGrid.Sorting += DataGrid_Sorting;
使用此代碼不會變得混亂,可讀性仍然完好無損。
我希望它對你有幫助。 快樂編碼。
我認為唯一“受支持”的方式(即,不對 Windows 消息做某事並且通常忽略 .NET 框架)是調用OnColumnHeaderMouseClick 。 這就是該方法的用途,除了它受到保護,因為它實際上是為某人做自己的控件版本,而不是讓任何隨機的人開始觸發事件。
因此,您可以繼承DataGridView
並添加一個公共方法來包裝OnColumnHeaderMouseClick
,或者您可以使用反射來調用該方法,即使它不是公共的。
這是 C# 中的常見模式。 當你寫
public event EventHandler XxxEvent;
它變成了類似的東西
private EventHandler _XxxEvent;
public event EventHandler XxxEvent
{
add { _XxxEvent += value; }
remove { _XxxEvent -= value; }
}
(加上 null 的一些處理,實際上不要按原樣使用該代碼)。
XxxEvent
實際上不是可以在 class 之外調用的委托(您將收到編譯器錯誤“事件 'ClassName.XxxEvent' 只能出現在 += 或 -=" 的左側)。 _XxxEvent
支持字段並不是您實際上應該知道的,並且無論如何都是私有的。 因此,如果您希望任何人都能夠從您的 class 繼承,您通常有一個方法,其名稱與前綴為“On”的事件相同
protected void OnXxxEvent(EventArgs args)
{
XxxEvent?.Invoke(this, args);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.