C#多形式变量?

时间:2011-05-27 21:27:25

标签: c# .net winforms

我有一个主要表单,其中包含大部分功能。我只是想知道如何将变量从弹出窗体传递到该主窗体。

例如:

我有一个需要一些连接信息的主表单。因此,当您单击“输入连接信息”按钮时,它会打开一个新表单,用户可以在其中键入要用于连接的IP地址。

在这个新表单上,我有一个文本框和一个按钮,一旦你输入信息,它应该关闭并将包含ip的字符串传递回原始表单。

有什么建议吗?您是否认为有一种更好的方法来实现这一点,而不是使用Windows窗体,只是继续使用Windows窗体或其他东西?我现在对这个问题感到非常困惑。

4 个答案:

答案 0 :(得分:3)

将文本框文本公开为公共只读属性。将连接表单显示为对话框,当它关闭时,从属性获取连接,然后处理表单:

在开放表单处理程序中(按钮单击,菜单,等等)

 string connectionString = null;

 using (ConnectionForm form = new ConnectionForm())
 {
     DialogResult result = form.ShowDialog();
     if (result == DialogResult.Ok)
         connectionString = form.ConnectionString
 }

在您的连接表格中:

 public class ConnectionForm: Form
 {
      ....
      public string ConnectionString { get { return textBox1.Text; } }
 }

答案 1 :(得分:0)

您可以在主窗体中创建公共属性,并在弹出构造函数中传递主窗体实例。通过这种方式,您可以更改主窗体属性。

您还可以在弹出窗体中创建一个事件,并将其挂钩在主窗体中。

答案 2 :(得分:0)

引用将对话框Form上的控件绑定到父窗体的属性。

public dlgDbConnProps ( Form Owner )
{
    // TODO: Complete member initialization
    InitializeComponent ( );

    owner = Owner;
}

private void cbo_ProviderLst_SelectedIndexChanged ( object sender, EventArgs e )
{
    owner.Provider = cboLst.Text;
}

这是我实施的另一种方法:

...将Func传递给子表单构造函数:

public dlgRequestLogin ( Func<string, string, bool> LoginMethod )
{
    InitializeComponent ( );
    p_loginMethod = LoginMethod;
}

...然后处理按钮点击(或其他适当的事件):

private void cmd_SendLoginCredentials_Click ( object sender, EventArgs e )
{
    bool res = p_loginMethod.Invoke ( txt_UserID.Text, txt_UserPassword.Text );
}

答案 3 :(得分:0)

我喜欢使用这样的模式(忍受我,c#不是我的第一语言):

    public class ValueForm: Form 
    {      
        public static string GetFromUser(string originalValue) 
        {
          using (ConnectionForm form = new ConnectionForm())
          {
             form.TheValue = originalValue;
             var result = form.ShowDialog();
             if (result == DialogResult.Ok)
                return form.TheValue;
             else 
                return originalValue;
          }
        } 

       public string TheValue { 
          get { return textBox1.Text; } 
          set { textBox1.Text = value; }
       }

       /* also some code behind your OK & cancel buttons to set 
          DialogResult appropriately, 
          and do any validation that you need to do
       */

    }

然后你会使用它:

string newValue = ValueForm.GetFromUser(oldValue);