2017-01-26 7 views
-5

У меня есть клиент WPF, запрограммированный C#. Программа представляет собой регистрационную демоверсию, вы вводите имя и указываете, являются ли они здесь или нет и отправляют его на сервер и порт, который пользователь вводит в текстовое поле.Ошибка: «ссылка на объект требуется для нестатического поля, метода или свойства ...»

При попытке применить это в коде, я получаю сообщение об ошибке: «ссылка на объект требуется для нестатического поля, метода или свойства ...». Это на линии «client.connect» ...

namespace client 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     public class connectandsend 
     { 

      //if 'REGISTER' button clicked do this...{ 
      static void connect() 
      { 
       TcpClient client = new TcpClient(); // New instance of TcpClient class of the .Net.Sockets 
       client.Connect(server_txt.Text, Convert.ToInt32(port_txt.Text)); // Server, Port 
       StreamWriter sw = new StreamWriter(client.GetStream()); // New StreamWriter instance 
       StreamReader sr = new StreamReader(client.GetStream()); // New StreamReader instance 
      } 

      /* static void send() 
      { 
       stream write... name.text and 'here' or 'not here' ticked box? 
      } 

      } 
      */ 
     } 

    } 
} 
+2

, пожалуйста, возьмите t он тайм-аут читал следующее: [Как задать вопрос] (http://stackoverflow.com/help/how-to-ask) – MethodMan

+0

Сделал изменения, надеется, что это будет достаточно хорошо, спасибо. – HJagger95

ответ

1

Метода connect() не может быть static, если вы хотите, чтобы иметь возможность получить доступ к любым нестатическим членам MainWindow в нем. Также он не может быть расположен в другом классе, если этот класс или сам метод также не имеют ссылки на класс MainWindow.

Удалите static ключевое слово и переместите метод в MainWindow класса:

public partial class MainWindow : Window 
{ 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    void connect() 
    { 
     ... 
    } 
} 

Или пройти server_txt.Text и port_txt.Text методу, когда вы называете его:

static void connect(string server, int port) 
{ 
    TcpClient client = new TcpClient(); // New instance of TcpClient class of the .Net.Sockets 
    client.Connect(server, port); // Server, Port 
    StreamWriter sw = new StreamWriter(client.GetStream()); // New StreamWriter instance 
    StreamReader sr = new StreamReader(client.GetStream()); // New StreamReader instance 
} 

MainWindow:

connectandsend.connect(server_txt.Text, Convert.ToInt32(port_txt.Text)); 
+0

Я вижу, правильно ли я сказал бы, что мой прокомментированный метод send() также должен быть void send(), поскольку он также пытается получить доступ к нестационарным членам основного окна? Кстати, я пошел с первым вариантом. – HJagger95

+0

Да, статический метод не может получить доступ к любому нестационарному члену экземпляра. Не забудьте принять ответ, если ваш исходный вопрос был решен, а затем задать новый вопрос, если у вас есть новая проблема. – mm8

+0

Великий, рад, что я мог узнать, что моя проблема и учиться на нем, ответ принят. Благодаря! – HJagger95