2015-11-09 3 views
0

я в состоянии передать одну переменную во вторую форму из первой основной формы, используя код ниже: Форма 1:Как передать более одной переменной в форме C#

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» из первой формы во второй форме. Однако из этой первой формы есть другие переменные, которые я хочу отобразить во второй форме, и я не могу понять, как это сделать. Любая помощь приветствуется.

+5

Пропустить дополнительные аргументы в 'PupJointRating'? – Tim

ответ

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(); 
+0

Большое спасибо. Это сработало отлично. Казалось, это самый интуитивный способ сделать это, но intellisense все время давал мне ошибку в отношении функции в форме 1. Я не понимал, что до тех пор, пока аргументы были добавлены в форму 2, которую Intellisense разрешит ей. Спасибо за помощь! –

+0

Np; Если этот ответ помог вам решить проблему, отметьте ее как принятую. благодаря – user0727

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 и является очень распространенным и очень полезным.

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

Используя этот подход, вы можете легко определить некоторые дополнительные свойства для объекта передачи и передать это без изменения аргументов для второй формы.

Смежные вопросы