簡體   English   中英

以編程方式調用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM