2013-11-08 3 views
0

Я пытаюсь написать простую программу и не знаком с передачей параметров с помощью методов. Это то, что я до сих пор применял при методе нажатия кнопки, но возвращает такие ошибки, как: использование непризнанной локальной переменной (для strColor, strMake и decPrice), а также «определение типа или пространства имен или ожидаемый конец файла», но у меня все мои скобки правильные. Спасибо за вашу помощь!Невозможно передать параметры без ошибок

private void btnSubmit_Click(object sender, EventArgs e) 
    { 
     string strColor; 
     string strMake; 
     decimal decPrice; 

     GetColor(ref strColor); 
     GetMake(ref strMake); 
     GetPrice(ref decPrice); 
     DisplayResult(strColor, strMake, decPrice); 

     private void GetColor(ref string color){ 
      color = lstColor.SelectedItem.ToString(); 
     } 
     private void GetMake(ref string make){ 
      make = lstMake.SelectedItem.ToString(); 
     } 
     private void GetPrice(ref decimal price){ 
      if (decimal.TryParse(txtMaxPrice.Text, out price)){ 
      } 
      else{ 
       MessageBox.Show("Enter a valid number"); 
      } 
     } 
     private void DisplayResult(string color, string make, decimal price){ 
      lblMessage.Text = "Color of " + color + " Make of: " + make + " " + price.ToString("c"); 
     } 
    } 
+0

Вы объявили методы в пределах методов или это опечатка? – Satpal

+0

Вот что я сделал. Так что это больше похоже на опечатку обучения, что это невозможно :) – tslater

ответ

2

При использовании ref keyword вам необходимо инициализировать параметр передается вызываемой функции.

Так что вам нужно

string strColor = string.Empty; 
string strMake = string.Empty; 
decimal decPrice = 0; 

конечно, вы не можете иметь функцию внутри другой функции. вы должны экс урочищу методы внутри обработчика событий кнопки и положить их на том же уровне btnSubmit_Click

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    string strColor; 
    string strMake; 
    decimal decPrice; 

    GetColor(ref strColor); 
    GetMake(ref strMake); 
    GetPrice(ref decPrice); 
    DisplayResult(strColor, strMake, decPrice); 
} 
private void GetColor(ref string color) 
{ 
    color = lstColor.SelectedItem.ToString(); 
} 
private void GetMake(ref string make) 
{ 
    make = lstMake.SelectedItem.ToString(); 
} 
private void GetPrice(ref decimal price) 
{ 
    if (decimal.TryParse(txtMaxPrice.Text, out price)) 
    { 
    } 
    else 
    { 
      MessageBox.Show("Enter a valid number"); 
    } 
} 
private void DisplayResult(string color, string make, decimal price) 
{ 
    lblMessage.Text = "Color of " + color + " Make of: " + make + " " + price.ToString("c"); 
} 

Однако использование вами реф ключевое слово, кажется, бессмысленно. Просто используйте оператор возврата и изменить методы, чтобы вернуть соответствующие значения и присвоить затем правильные переменные

... in btnSubmit_Click 

string strColor = GetColor(); 
string strMake = GetMake(); 
decimal decPrice = GetPrice(); 
if(decPrice != 0) 
    ..... 


private string GetColor() 
{ 
    return lstColor.SelectedItem.ToString(); 
} 

private string GetMake() 
{ 
    return lstMake.SelectedItem.ToString(); 
} 
private decimal GetPrice() 
{ 
    decimal price; 
    if(!decimal.TryParse(txtMaxPrice.Text, out price)) 
    { 
     MessageBox.Show("Enter a valid number"); 
    } 
    return price; 
} 
+0

Спасибо, исправлена ​​теперь, обычная ошибка копирования/вставки – Steve

0

Вы объявляете методы в пределах методов. Переместить декларацию DisplayResult, GetPrice, GetMake и GetColor из декларации за btnSubmit_Click

1

Вы не можете поставить ФУНКЦИИ внутри другие функции. Это то, что вы делаете - первая строка вашего котируемого кода, «private void btnSubmit_Click (отправитель объекта, EventArgs e)», определяет функцию, и вы пытаетесь поместить в нее другие функции. Вы хотите конец} после «DisplayResult (strColor, strMake, decPrice);

0

вы не можете иметь метод внутри методы перемещения его за пределы кнопки вызова

private void btnSubmit_Click(object sender, EventArgs e) 
     { 
      string strColor; 
      string strMake; 
      decimal decPrice; 

      GetColor(ref strColor); 
      GetMake(ref strMake); 
      GetPrice(ref decPrice); 
      DisplayResult(strColor, strMake, decPrice); 
    } 
private void GetColor(ref string color){ 
       color = lstColor.SelectedItem.ToString(); 
    } 
    private void GetMake(ref string make){ 
       make = lstMake.SelectedItem.ToString(); 
      } 
    private void GetPrice(ref decimal price){ 
       if (decimal.TryParse(txtMaxPrice.Text, out price)){ 
       } 
       else{ 
        MessageBox.Show("Enter a valid number"); 
       } 
      } 
    private void DisplayResult(string color, string make, decimal price){ 
       lblMessage.Text = "Color of " + color + " Make of: " + make + " " +price.ToString("c"); 
      } 
+0

Я сделал это, однако ошибка использования неназначенных переменных остается. – tslater

0

Есть целый ряд вещей, не так с этим кодом. Во-первых, как говорили другие, вы пытались вложить методы внутри методов. Другая проблема заключается в том, что вы используете ref для передачи значений из методов, а не для использования возвращаемого типа.

Методы инициализации strColor и strMake на самом деле не нужны и могут быть «вставлены в линию», а GetPrice можно улучшить, добавив к нему возвращаемый тип.

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    string strColor = lstColor.SelectedItem.ToString(); 
    string strMake = lstMake.SelectedItem.ToString(); 
    decimal decPrice = GetPrice((); 
    DisplayResult(strColor, strMake, decPrice); 
} 

private decimal GetPrice() 
{ 
    decimal price; 
    if (!decimal.TryParse(txtMaxPrice.Text, out price)) 
    { 
     MessageBox.Show("Enter a valid number"); 
    } 

    return price; 
} 

private void DisplayResult(string color, string make, decimal price) 
{ 
    lblMessage.Text = string.Format("Color of {0} Make of: {1} {2}", 
            color, make, price.ToString("c")); 
}