如何将多个变量传递给C#中的表单

时间:2015-11-09 21:20:53

标签: c# forms

我可以使用下面的代码从第一个主窗体传递一个变量到第二个窗体: 表格1:

public void PJRating_Click(object sender, RoutedEventArgs e)
{

    //This block reads in user text box submissions
    mys = Convert.ToDouble(MYS.Text);
    tubeOD = Convert.ToDouble(TubeOD.Text);
    tubeID = Convert.ToDouble(TubeID.Text);
    tjOD = Convert.ToDouble(TJOD.Text);
    adjTens = ((Math.Pow(((((tubeOD - tubeID) * 0.95) + tubeID)), 2) - Math.Pow(tubeID, 2)) * (Math.PI / 4)) * (mys * Math.Pow(10, 3));

    //Diplay the new window
    PupJointRating newTensileRating = new PupJointRating(adjTens);
    newTensileRating.Show();
} 

表格2:

public PupJointRating(double adjTens)
{

    InitializeComponent();
    Convert.ToString(adjTens);
    string tensCap = String.Format("{0:N0}", adjTens);
    DisplayTensCap.Text = tensCap;
}

此代码适用于在第二个表单上显示第一个表单中的“adjTens”变量。但是,我希望在第二个表单上显示第一个表单中的其他变量,我无法弄清楚如何执行此操作。任何帮助将非常感激。

3 个答案:

答案 0 :(得分:3)

您可以向Form2的构造函数添加更多参数。例如:

public PupJointRating(double adjTens, int arg1, string arg2)
{
    InitializeComponent();
    Convert.ToString(adjTens);
    string tensCap = String.Format("{0:N0}", adjTens);
    DisplayTensCap.Text = tensCap;
    //Do something with arg1, arg2
}

然后通过传递其他参数来调用它:

int myInt= 0;
string myString = string.Empty;

//...

//Diplay the new window
PupJointRating newTensileRating = new PupJointRating(adjTens, myInt, myString);
newTensileRating.Show();

答案 1 :(得分:1)

您有两种选择。您可以像这样扩展当前的Form2构造函数:

public PupJointRating(double adjTens, double secondParam)
{
    InitializeComponent();
    Convert.ToString(adjTens);
    string tensCap = String.Format("{0:N0}", adjTens);
    DisplayTensCap.Text = tensCap;
    //do something with secondParam
}

然后在你的第一个表格中你会做这样的事情:

PupJointRating pjr = new PupJointRating(myDoubleVar, myOtherDoubleVar);

或者您可以简单地添加第二个带有其他参数的构造函数,如上所述。这样做可以让您选择创建一个PupJointRating对象,只需要传递一个参数,或者两个:

var pjr1 = new PupJointRating(myDoubleVar);
var pjr2 = new PupJointRating(myDoubleVar, myOtherDoubleVar);

这两个都是有效的代码行,并为您提供一个对象。

这称为member overloading,非常常见且非常有用。

答案 2 :(得分:0)

更好的方法是声明一些数据传输类,例如:

public class SecondFormParams
{
    public string ArgumentOne {get;set;}
    public string ArgumentTwo {get;set;}
}

将其添加为第二种形式的参数:

public PupJointRating(SecondFormParams secondFormParams)
{
    InitializeComponent();
    string tensCap = String.Format("{0:N0}", secondFormParams.ArgumentOne);
    DisplayTensCap.Text = tensCap;
    //Do something with other params, like: secondFormParams.ArgumentTwo
}

用params填充此对象,然后显示第二种形式:

public void PJRating_Click(object sender, RoutedEventArgs e)
{
    // Init your transfer object
    var sfp = new SecondFormParams();

    //This block reads in user text box submissions
    mys = Convert.ToDouble(MYS.Text);
    tubeOD = Convert.ToDouble(TubeOD.Text);
    tubeID = Convert.ToDouble(TubeID.Text);
    tjOD = Convert.ToDouble(TJOD.Text);
    sfp.ArgumentOne = ((Math.Pow(((((tubeOD - tubeID) * 0.95) + tubeID)), 2) - Math.Pow(tubeID, 2)) * (Math.PI / 4)) * (mys * Math.Pow(10, 3));
    sfp.ArgumentTwo = "Yo man, do something with me on the next form";
    //Diplay the new window
    PupJointRating newTensileRating = new PupJointRating(sfp);
    newTensileRating.Show();
} 

使用此方法,您可以轻松地为传输对象定义一些其他属性,并在不更改第二个表单的参数的情况下传递此属性。