在winforms之间传递变量

时间:2010-11-22 16:41:25

标签: c# .net winforms delegates

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

有两种形式:

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

  2. “设置”表单,这是“子”表单。

  3. 当我单击主窗体中的“设置”按钮时,它会打开“设置”窗体的实例。

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

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

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

5 个答案:

答案 0 :(得分:12)

将您想要的任何信息传递给“设置”表单的构造函数,并为您需要的内容提供访问器方法。

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
}

答案 1 :(得分:5)

Setttings表单是一个类。它现在是你的,你可以用它做你喜欢的事。因此,在其构造函数中添加一个参数(或许多你想要的参数)。然后在你的MainForm中调用SettingsForm(无论如何),你就完全了。

答案 2 :(得分:4)

我建议在SettingsForm中添加一个属性。

然后,这样称呼它:

SettingsForm settingsForm = new SettingsForm(); 
settingform.myProperty = myPropertyvalue;
settingsForm.ShowDialog();   

答案 3 :(得分:2)

为什么不在设置表单中添加构造函数,该表单接受参数并传入您需要的任何数据?

答案 4 :(得分:2)

您可以为接受文本的设置表单创建参数化构造函数,并将其设置为表单中的属性

public partial class SettingsForm : Form
{

   public string DisplayText {get;set;}

   public SettingsForm(string text)
   {
        DisplayText = text;
   }
}

然后,你只需要像这样(从你的主窗体)

初始化设置
var settingsForm = new SettingsForm("my init text");

您的设置表单将被正确初始化,并且您可以在DisplayText属性中使用所需的文本