簡體   English   中英

C# 如何將方法傳遞給基於 WinForm 按鈕單擊事件

[英]C# How do I pass a method to base WinForm button click event

我有一個 WinForm 應用程序,它有 5 個表單。 從主窗體有三個按鈕,每個按鈕加載一個具有基本相同設計和布局的窗體。 出於這個原因,我創建了一個基本表單,這些表單將從中繼承。

每個子窗體都有一個 LoadData 按鈕,該按鈕將從基本窗體繼承。 我想要做的是在該基本表單上調用該按鈕的點擊事件,並根據正在使用的子表單執行不同的方法。 而不是在每個表單上都有表單特定的點擊事件。

所以基本上我想在子表單中做這樣的事情。 但我不知道該怎么做。 我讀到的一切都讓我感到困惑。


protected override BaseFormOnClick()
{
    LoadDataSet1
}

我還希望能夠繼承基本表單上的拖放事件。 我猜我需要訂閱它,但我似乎無法讓它工作。 所以像這樣的事情。


public DerivedForm() : base()
{
    base.Drag_Drop_Event(EventArgs.Empty)
}

剛剛開始研究事件處理程序和委托,因此將不勝感激任何幫助。

請將您的問題帖子一次限制為一個問題。

對於第一個,它應該像在基類中聲明一樣簡單:

protected virtual void button1_Click(object sender, EventArgs e) { }

然后在每個派生類中,覆蓋它:

protected override void button1_Click(object sender, EventArgs e)
{
    // do button stuff here
}

只需在基類本身中為按鈕的Click事件訂閱基類方法。 例如:

// Constructor
protected BaseForm()
{
    InitializeComponent();
    button1.Click += button1_Click;
}

從理論上講,您應該能夠使基類方法abstract而不是virtual ,但我不確定 Winforms Designer 將如何適應這樣的抽象基類。

與虛擬方法一樣,如果您希望基類在單擊按鈕時也執行某些操作,則需要堅持使用virtual ,並包含對base.button1_Click(sender, e);的調用base.button1_Click(sender, e); 在派生類實現中。

老實說,我相信網站上已經有一個問題和答案可以解決這個問題,但我一生都找不到它。

如果您無法從簡單的按鈕案例推斷如何處理拖放,請將其作為一個單獨的問題提出,展示您目前所擁有的最小、完整示例,並解釋您具體需要幫助的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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