首頁 >後端開發 >C++ >如何使用委託在 Windows 窗體之間傳遞資料?

如何使用委託在 Windows 窗體之間傳遞資料?

DDD
DDD原創
2025-01-03 19:18:42814瀏覽

How to Pass Data Between Windows Forms Using Delegates?

使用委託在Windows 窗體之間傳遞資料

在Windows 窗體應用程式中,當使用多個窗體時,通常需要傳遞數據他們之間。實現這一目標的常見方法是透過代表。以下是使用委託實作資料傳遞的方法:

建立委託

首先,您需要建立一個委託作為資料傳輸的回呼方法。在C# 中,可以如下完成:

public delegate void PageInfoHandler(object sender, PageInfoEventArgs e);

此委託聲明一個帶有兩個參數的方法:一個發送者物件(通常是發送資料的表單)和一個事件參數物件(其中包含實際的數據)。 data)。

使用委託

在主視窗中,您可以建立委託的實例,並在您想要將資料傳遞到子視窗時引發事件。例如:

public partial class MainForm : Form
{
    // Declare the delegate instance
    public event PageInfoHandler PageInfoRetrieved;

    private void toolStripBtnSettings_Click(object sender, EventArgs e)
    {
        PageInfoEventArgs args = new PageInfoEventArgs(SomeString);
        this.OnPageInfoRetrieved(args);

        SettingsForm settingsForm = new SettingsForm();
        settingsForm.ShowDialog();
    }

    private void OnPageInfoRetrieved(PageInfoEventArgs args)
    {
        if (PageInfoRetrieved != null)
            PageInfoRetrieved(this, args);
    }
}

擷取資料

在子表單(在本例中為 SettingsForm)中,您可以訂閱委託事件來接收資料。這可以在子窗體的建構函式或其初始化程式碼中完成。例如:

public class SettingsForm : Form
{
    public SettingsForm()
    {
        // Subscribe to the delegate event
        if (MainForm.PageInfoRetrieved != null)
            MainForm.PageInfoRetrieved += new PageInfoHandler(OnPageInfoRetrieved);
    }

    private void OnPageInfoRetrieved(object sender, PageInfoEventArgs e)
    {
        // This method will be called when the PageInfoEventArgs is raised
        // in the main form. You can access the data from the event argument here.
        // ...
    }
}

使用資料

在子表單中擷取資料後,您可以使用提供的事件參數存取實際資料。在此範例中,資料作為 PageInfoEventArgs 物件的屬性傳遞。例如,您可以這樣使用它:

// In the SettingsForm
private void DisplayData()
{
    // Get the data from the event arguments
    string data = e.Data;

    // Display or use the data in the child form
    // ...
}

透過執行以下步驟,您可以使用委託在多個Windows 窗體之間高效地傳遞數據,從而實現應用程式中窗體之間的通信和資料交換。

以上是如何使用委託在 Windows 窗體之間傳遞資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:CS-第 3 週下一篇:CS-第 3 週