一尘不染

在winform之间传递变量

c#

我在Windows.Forms应用程序中遇到有关委托的问题。

有两种形式:

  1. 主窗体,其中有一个名为“设置”的按钮。

  2. “设置”形式,这是“孩子”形式。

当我单击主窗体中的“设置”按钮时,它将打开“设置”窗体的一个实例。

我的问题是,当我打开变量时,需要将其传递给“设置”表单。这样新表单将显示变量文本。我不知道如何在子“设置”表单中检索信息。我通过遵循在线教程来做到这一点,但从教程中无法理解如何读取目标表单中的信息。

到目前为止,这是我做的主要形式的代码:

public partial class MainForm : Form
{

    /// <summary>
    /// delegate to send data between forms
    /// </summary>
    public delegate void PageInfoHandler(object sender, PageInfoEventArgs e);
    /// <summary>
    /// event of the delegate
    /// </summary>
    public event PageInfoHandler PageInfoRetrieved;

    //other stuff, events blabla

    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);
    }
}

阅读 199

收藏
2020-05-19

共1个答案

一尘不染

将所需的任何信息传递到“设置”表单的构造函数中,并提供所需的访问器方法。

public class SettingsForm : WinForm
{
    private string m_Data;
    private int m_nExample = 0;

    // ctor
    public SettingsForm(string _data)
    {
        m_Data = data;  // you can now use this in SettingsForm
    } // eo ctor

    public int Example {get{return(m_nExample);} }
} // eo class SettingsForm

在上面的“示例”中,您可以使用字符串构造一个SettingForm并获取它可能使用的整数。在您的代码中:

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

    SettingsForm settingsForm = new SettingsForm("some data to pass");
    settingsForm.ShowDialog();

    int result = settingsForm.Example; // retrieve integer that SettingsForm used
}
2020-05-19