Как правильно создать экземпляр для использования методов? - PullRequest
0 голосов
/ 10 октября 2018

Я сейчас пытаюсь обернуть голову вокруг занятий.Вероятно, это вопрос новичка, но, учитывая, что я продолжаю гуглить и застреваю в кругу, думаю, мне нужен указатель.

Проблема в том, что я пытаюсь создать экземпляр, чтобы я мог использовать методы Info и Liste нажатием кнопки в winforms.Тем не менее, он говорит мне, что

не указан аргумент, который соответствует обязательному параметру формы 1.

Что имеет смысл, учитывая его конструктор ивсе.

В качестве потенциального исправления он говорит мне использовать следующий код в классе Methods:

public Methods()
{
}

Какой другой конструктор я использую, однако у меня нет идеи, что делатьделать с этим.Помощь приветствуется.

public partial class Main : Form
{
    Methods Methods = new Methods(); // not working

    public Main()
    {
        InitializeComponent();
        Methods Methods = new Methods(this);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Methods.Info();  // not working
        Methods.Liste(); // not working
    }       
}

public class Methods
{
    int count = 0;
    private Main mainForm;

    public Methods(Main form1)
    {
        mainForm = form1;
    }

    public void Info()
    {
        Inventory.array[count] = Convert.ToInt32(mainForm.textBox2.Text) * Convert.ToInt32(mainForm.textBox3.Text);
        count++;
    }

    public void Liste()
    {
        int sum = 0;
        foreach (int i in Inventory.array)
        {
            sum += i;
        }
        mainForm.label5.Text = Convert.ToString(sum);
    }
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

У вас есть куча ошибок.Давайте сфокусируем их шаг за шагом:

  1. У вас есть поле типа Methods, которое ссылается на один экземпляр вашего Methods -класса (кстати, действительно плохое имя для класса ).Для создания этого экземпляра вам нужна ссылка на существующую форму.Однако ключевое слово this не существует вне участника.Вот что компилятор жалует в объявлении поля.

  2. В вашем конструкторе есть локальная переменная с именем Methods, которая скрывает поле.Итак, на самом деле у вас есть два экземпляра класса, один в поле, а другой определен в cosntructor.Просто опустите последнее:

    readonly Methods Methods;
    
    public Main()
    {
        InitializeComponent();
        this.Methods = new Methods(this);
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        Methods.Info();  // not working
        Methods.Liste(); // not working
    }
    

    Просто в сторону: вы можете опустить this -ключевой ключ в конструкторе:

    Methods = new Methods(this)
    

    вместо

    this.Methods = new Methods(this)
    

    как понятно, на какой символ вы ссылаетесь.Я только добавил это, чтобы сделать это более ясным.

  3. Самое важное: Methods действительно плохое имя для класса.Вместо этого выберите имя, которое описывает, что должен делать ваш класс.Лучше всего вы посмотрите на соглашения об именах .

0 голосов
/ 10 октября 2018
Methods Methods = new Methods(this);

создает локальную переменную, которая затеняет поле в классе.Вместо этого используйте

this.Methods = new Methods(this);

.И вы не должны использовать заглавные слова для полей или местных жителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...