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

有两种形式:

  • 是主窗体,其中有一个名为“设置”的按钮。
  • 是“设置”形式,这是“子”形式。

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

    我的问题是,当我打开变量时,需要将其传递给“设置”表单。这样,新表单将显示变量文本。我不知道如何在子“设置”表单中检索信息。我是通过在线阅读教程来完成此操作的,因此无法从教程中了解如何读取目标表单中的信息。

    到目前为止,这是我做的主要形式的代码:
    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);
        }
    }
    

    最佳答案

    将您想要的任何信息传递到“设置”表单的构造函数中,并为您在那里需要的东西提供访问器方法。

    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
    }
    

    关于c# - 在Winform之间传递变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4247807/

    10-17 02:22