2014-11-27 5 views
-4

У меня есть три класса, и код приведен ниже.Этот открытый метод C# не возвращает значение

Сеть - добавление и удаление телефона, обработка вызовов. Phone1 и Phone2 могут звонить друг другу при добавлении в сеть.

Но у меня проблема, когда я соединяю телефон с сетью и пытаюсь позвонить phone1 на телефон2; он продолжает давать мне «приемник занят». Я попытался сделать небольшую отладку и прочитать статус телефона2 при вызове с телефона1, но он возвращает пустую строку (которая должна фактически вернуть «А», когда она добавляется в сеть, поскольку я устанавливаю ее значение в «А «).

public partial class network : Form 
{ 
    phone1 p1 = new phone1(); 
    phone2 p2 = new phone2(); 
    public network() 
    { 
     InitializeComponent(); 
    } 

    public Boolean numberValidator(int number) 
    { 
     Boolean exist = false; 
     if (comboBox2.Items.Equals(number)) 
     { 
      exist = true; 
     } 

     return exist; 
    } 

    public void processCall(int rNumber) 
    { 
     if (!numberValidator(rNumber)) 
     { 
      p1.TextBox1.Clear(); 
      p1.TextBox1.Text = "Not connected"; 
     } 

     else 
     { 
      p1.TextBox1.Clear(); 
      p1.TextBox1.Text = "Call in progress"; 
      p2.receiveCall(1); 
      p1.setStatus("Busy"); 
      /* 
      if (p2.btnCallPressStatus()) 
      { 
      p1.TextBox1.Clear(); 

      p1.TextBox1.Text = "Call initiated"; 
      }*/ 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (comboBox1.SelectedIndex == 0) 
     { 
      p1.Show(); 
      comboBox2.Items.Add(1); 
      p1.setStatus("A"); 
     } 
     if (comboBox1.SelectedIndex == 1) 
     { 
      p2.Show(); 
      comboBox2.Items.Add(2); 
      p2.setStatus("A"); 
     } 
    } 
} 

---------- Phone1 Класс ---------

public partial class phone1 : Form 
{ 
    public phone1() 
    { 
     InitializeComponent(); 
    } 

    string status; 
    public void setStatus(string Status) 
    { 
     status = Status; 
    } 

    public string returnStatus() 
    { 
     return status; 
    } 

    public void receiveCall(int callerNumber) 
    { 
     setStatus("Busy"); 
     btnCall.Text = "Answer"; 
     textBox1.Text = "Phone " + callerNumber + " Calling."; 
    } 

    public void makeCall(int number) 
    { 
     phone2 p2 = new phone2(); 
     network net = new network(); 

     MessageBox.Show(p2.returnStatus()); // this line not returing status of phone2 
     if (p2.returnStatus() == "A") 
     { 
      net.processCall(number); 
     } 
     else 
     { 
      textBox1.Text = "Receiver Busy"; 
     } 
    } 

    public TextBox TextBox1 
    { 
     get 
     { 
      return textBox1; 
     } 
    } 

    private void btnCall_Click(object sender, EventArgs e) 
    { 
     string number = textBox1.Text; 
     int numberInt = Convert.ToInt16(number); 

     makeCall(numberInt); 
    } 

    string phoneNo = ""; 
    private void btn2_Click(object sender, EventArgs e) 
    { 
     phoneNo = phoneNo + btn2.Text; 
     textBox1.Text = phoneNo; 
    } 
} 

------------- phone2 Класс --------------

public partial class phone2 : phone1 
{ 
    public phone2() 
    { 
     InitializeComponent(); 
    } 
} 
+4

Я отредактировал вопрос, чтобы очистить код, но вам было бы полезно отредактировать его дальше, чтобы удалить любой код, не имеющий отношения к проблеме. Большинство людей не хотят копать всю программу, чтобы найти, где эта проблема. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve) – TheEvilPenguin

+0

Где вы ожидаете, что 'p2.Status' будет установлен в 3 строках между его созданием и показом положение дел? Конструктор не устанавливает его. Вы явно не устанавливаете его в 'makeCall'. – Blorgbeard

ответ

1

Обычная makeCall создает новый экземпляр phone2 и вызывает returnStatus. Проблема в том, что строка «status» не инициализируется с любым значением, когда p2 создается, поэтому значение returno никогда не будет «A», и вы всегда будете терпеть неудачу.

+0

Так что вы предлагаете мне делать? какой подход я должен принять? –

+0

Эммадул, вам нужно «переосмыслить» свой подход. У вас есть 2 «телефона» и «сеть». Во-первых, они являются отдельными объектами. Таким образом, сеть не должна создавать собственные экземпляры «телефона». Вместо этого вы могли бы поддерживать список доступных «телефонов» и при запуске, все «телефоны» отправили бы сообщение в сеть, в котором говорилось «Я доступен». Телефоны, которые могут запрашивать подключение, и сеть может подключаться (если другой номер доступен, или отправить предупреждение «занято», если телефон недоступен или занят. В конце концов, когда один из телефонов заканчивается, Просто идея :) – Jauch

+0

большое спасибо за ваш комментарий, я обязательно отдам его. –

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