如何在C#中将多个变量传递给一个窗体
本文关键字:窗体 一个 变量 | 更新日期: 2023-09-27 18:21:12
我可以使用以下代码将一个变量从第一个主窗体传递到第二个窗体:表格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"变量。然而,我想在第二种窗体上显示来自第一个窗体的其他变量,但我不知道如何做到这一点。任何帮助都将不胜感激。
您可以向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();
您有两个选项。您可以这样扩展当前的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);
这两行代码都将是有效的代码行,并为您提供一个对象。
这被称为成员重载,它非常常见,也非常有用。
更好的方法是声明一些数据传输类,例如:
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();
}
使用这种方法,您可以很容易地为传输对象定义一些附加属性,并在不更改第二种形式的参数的情况下传递这些属性