Ошибка cs7036 отсутствует аргумент соответствующий требуемому формальному параметру

I have been refactoring one of my old MSSQL Connection helper library and I got the following error:

Error CS7036 There is no
argument given that corresponds to the required formal parameter
‘errorMsg’ of ‘ErrorEventArg.ErrorEventArg(string,
string)’ MSSQLTest C:UsersAdministratorDesktopMSSQLTestMSSQLTestMSSQLConnection.cs 61

This is my code so far:

MSSQLConnection.cs

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Threading;

namespace MSSQLTest
{
    public class ErrorEventArg : EventArgs
    {
        public string ErrorMsg { get; set; }
        public string LastQuery { get; set; }

        public ErrorEventArg(string errorMsg, string lastQuery)
        {
            ErrorMsg = errorMsg;
            LastQuery = lastQuery;
        }
    }

    public class MSSQLConnection
    {
        /// <summary>
        /// Private class objects.
        /// </summary>
        private SqlConnection sqlConnection;
        private int sqlCommandTimeout;
        private string lastQuery = string.Empty;

        /// <summary>
        /// Public event related objects & handler.
        /// </summary>
        public event ErrorHandler OnError;
        public delegate void ErrorHandler(MSSQLConnection sender, ErrorEventArg e);

        /// <summary>
        /// Class constructor.
        /// </summary>
        /// <param name="sqlConnection"></param>
        /// <param name="sqlCommandTimeout"></param>
        public MSSQLConnection(SqlConnection sqlConnection, Int32 sqlCommandTimeout = 120)
        {
            if (null == sqlConnection)
                throw new Exception("Invalid MSSQL Database Conection Handle");

            if (sqlConnection.State != System.Data.ConnectionState.Open)
                throw new Exception("MSSQL Database Connection Is Not Open");

            this.sqlConnection = sqlConnection;
            this.sqlCommandTimeout = sqlCommandTimeout;
        }

        /// <summary>
        /// Helper method to emit a database error to event subscribers.
        /// </summary>
        /// <param name="errorMsg"></param>
        internal void EmitError(String errorMsg)
        {
            var errorDelegate = OnError;
            if (errorDelegate != null)
            {
                errorDelegate(this, new ErrorEventArg() // Line #61
                {
                    ErrorMsg = errorMsg,
                    LastQuery = lastQuery
                });
            }
        }
        
        /// rest of the code snipped
    }
}

What does this error means & how do I fix it? I’ve not seen this error before…

Wai Ha Lee's user avatar

Wai Ha Lee

8,56381 gold badges57 silver badges92 bronze badges

asked Nov 9, 2015 at 10:32

Latheesan's user avatar

LatheesanLatheesan

23.1k32 gold badges106 silver badges198 bronze badges

2

In the constructor of

public class ErrorEventArg : EventArgs

you have to add «base» as follows:

public ErrorEventArg(string errorMsg, string lastQuery) : base (string errorMsg, string lastQuery)
{
    ErrorMsg = errorMsg;
    LastQuery = lastQuery;
}

Wai Ha Lee's user avatar

Wai Ha Lee

8,56381 gold badges57 silver badges92 bronze badges

answered Nov 21, 2018 at 20:27

FullStackSoon's user avatar

2

You have a constructor which takes 2 parameters. You should write something like:

new ErrorEventArg(errorMsv, lastQuery)

It’s less code and easier to read.

EDIT

Or, in order for your way to work, you can try writing a default constructor for ErrorEventArg which would have no parameters, like this:

public ErrorEventArg() {}

answered Jan 4, 2017 at 18:08

Filip Savic's user avatar

Filip SavicFilip Savic

2,67928 silver badges32 bronze badges

0

I got the same error but it was due to me not creating a default constructor. If you haven’t already tried that, create the default constructor like this:

public TestClass()
{
}

Wai Ha Lee's user avatar

Wai Ha Lee

8,56381 gold badges57 silver badges92 bronze badges

answered May 7, 2019 at 20:50

CaptainGenesisX's user avatar

I got this error when one of my properties that was required for the constructor was not public. Make sure all the parameters in the constructor go to properties that are public if this is the case:

using statements
namespace someNamespace

public class ExampleClass {

  //Properties - one is not visible to the class calling the constructor
  public string Property1 { get; set; }
  string Property2 { get; set; }

   //Constructor
   public ExampleClass(string property1, string property2)
  {
     this.Property1 = property1;
     this.Property2 = property2;  //this caused that error for me
  }
}

answered Oct 18, 2018 at 16:26

JakeJ's user avatar

JakeJJakeJ

2,3115 gold badges23 silver badges34 bronze badges

I received this same error in the following Linq statement regarding DailyReport. The problem was that DailyReport had no default constructor. Apparently, it instantiates the object before populating the properties.

var sums = reports
    .GroupBy(r => r.CountryRegion)
    .Select(cr => new DailyReport
    {
        CountryRegion = cr.Key,
        ProvinceState = "All",
        RecordDate = cr.First().RecordDate,
        Confirmed = cr.Sum(c => c.Confirmed),
        Recovered = cr.Sum(c => c.Recovered),
        Deaths = cr.Sum(c => c.Deaths)
    });

answered Mar 18, 2020 at 15:51

AdvApp's user avatar

AdvAppAdvApp

1,0641 gold badge14 silver badges27 bronze badges

public ErrorEventArg(string errorMsg, string lastQuery)
    : base (errorMsg, lastQuery)
{
    ErrorMsg = errorMsg;
    LastQuery = lastQuery;
}

to call base constructor the parameters of sub class and base class must be same.

Wai Ha Lee's user avatar

Wai Ha Lee

8,56381 gold badges57 silver badges92 bronze badges

answered Jul 5, 2021 at 9:21

kaszm's user avatar

kaszmkaszm

514 bronze badges

1

Ошибка:

CS7036 Отсутствует аргумент, соответствующий требуемому формальному
параметру «services» из «CommandService.AddModulesAsync(Assembly,
IServiceProvider)».

public class CommandHeadler {
    private DiscordSocketClient _client;

    private CommandService _service;
    public CommandHeadler(DiscordSocketClient client) {
        _client = client;

        _service = new CommandService();

        _service.AddModulesAsync(Assembly.GetEntryAssembly());

        _client.MessageReceived += HandleCommandAsync;
    }
    private async Task HandleCommandAsync(SocketMessage s) {
        var msg = s as SocketUserMessage;
        if (msg == null) return;

        var context = new SocketCommandContext(_client, msg);

        int argPos = 0;
        if (msg.HasCharPrefix('!', ref argPos)) {
            var result = await _service.ExecuteAsync(context, argPos);

            if (!result.IsSuccess && result.Error != CommandError.UnknownCommand) {
                await context.Channel.SendMessageAsync(result.ErrorReason);
            }

        }
    }
}

MiT's user avatar

MiT

5,4871 золотой знак11 серебряных знаков31 бронзовый знак

задан 17 янв 2020 в 9:13

love AME's user avatar

4

В ошибке указано, что функция принимает два аргумента

CommandService.AddModulesAsync(Assembly, IServiceProvider)

Ты передаешь только один

_service.AddModulesAsync(Assembly.GetEntryAssembly())

Нужно передавать два, второй параметр должен иметь тип IServiceProvider, если у тебя нет сервис провайдера можно передать null

_service.AddModulesAsync(Assembly.GetEntryAssembly(), null)

ответ дан 17 янв 2020 в 11:41

Grundy's user avatar

GrundyGrundy

80.1k9 золотых знаков77 серебряных знаков133 бронзовых знака

Revin

0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

1

06.01.2019, 22:41. Показов 10439. Ответов 18

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Приветствую, вот такая проблема, даже не могу охарактеризовать, в общем то наглядно вот:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F3)
            {
                if (kv == 0)
                {
                    Error();
                }
                else if (kv == 1)
                {
                    MessageBox.Show("Работа была начата, чтобы окончить нажмите F2", "Start!");
                    kv = 2;
                    Going(); //Здесь ошибка собственно
                }
                return;
            }
        }

Сам паблик:

C#
1
2
3
4
5
        public static void Going(int millisecondsTimeout)
        {
            SendKeys.Send("w");
            Going(2000);
        }

Ну и конечно же ошибка:

C#
1
CS7036  Отсутствует аргумент, соответствующий требуемому формальному параметру "millisecondsTimeout" из "Bot.Going(int)".

Эх люди умные, не откажите в помощи!



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

06.01.2019, 22:41

Ответы с готовыми решениями:

Отсутствует аргумент, соответствующий требуемому формальному параметру
При попытке перейти на форму Test с Form1 выдает ошибку &quot;Отсутствует аргумент, соответствующий…

Отсутствует аргумент, соответствующий требуемому формальному параметру
Нужна помощь в решении одной проблемы, а именно: Ошибка CS7036 Отсутствует аргумент,…

Отсутствует аргумент, соответствующий требуемому формальному параметру ,как исправить?
При вызове формы

Form4 pos = new Form4();
pos.ShowDialog();

Сама форма

Код калькулятора выдает ошибку «Отсутствует аргумент, соответствующий требуемому формальному параметру»
Помогите, тут такое дело. Нужно написать калькулятор, который выполняет одно действие(сложение,…

18

814 / 561 / 240

Регистрация: 01.07.2018

Сообщений: 1,818

06.01.2019, 22:55

2

Revin, Ваш метод Goening видимо должен аргумент принимать, а вы без аргумента пытаетесь выполнить



0



16 / 10 / 4

Регистрация: 16.12.2017

Сообщений: 281

06.01.2019, 23:00

3

Там метод сам себя вроде бы вызывает



0



814 / 561 / 240

Регистрация: 01.07.2018

Сообщений: 1,818

06.01.2019, 23:02

4

Dimasta1488, Ну покажите его уже.



0



Someone007

Эксперт .NET

6403 / 3940 / 1578

Регистрация: 09.05.2015

Сообщений: 9,241

06.01.2019, 23:30

5

Цитата
Сообщение от Revin
Посмотреть сообщение

C#
1
Going(); //Здесь ошибка собственно

Цитата
Сообщение от Revin
Посмотреть сообщение

C#
1
Going(2000);

Как говорится найди разницу…



0



Revin

0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

06.01.2019, 23:35

 [ТС]

6

Я исправил, ошибка исчезла, теперь код выглядит так:

C#
1
2
3
4
5
6
else if (kv == 1)
                {
                    MessageBox.Show("Работа была начата, чтобы окончить нажмите F2", "Start bot!");
                    kv = 2;
                    Going(5000);
                }

Ну и паблик

C#
1
2
3
4
5
        public static void Going(int millisecondsTimeout)
        {
            SendKeys.Send("w");
            Going(5000);
        }

Однако в течение 5 миллисекунд буква w не пишется (должна быть по сути эмуляция зажатия клавиши W)



0



15 / 14 / 9

Регистрация: 14.12.2017

Сообщений: 48

07.01.2019, 00:09

7

SendKeys.Send() — это оболочка форм над WinApi, лучше юзай WinApi для эмуляции нажатия кнопок в окне.

Не по теме:

В методе Going() не используется значение таймаута



0



0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

07.01.2019, 00:13

 [ТС]

8

PplAlt, то есть как тогда будет выглядеть код?



0



Andreyip

534 / 344 / 116

Регистрация: 17.08.2014

Сообщений: 1,290

07.01.2019, 22:33

9

C#
1
2
3
4
5
 public static void Going(int millisecondsTimeout)
        {
            SendKeys.Send("w");
            Going(5000);
        }

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

Добавлено через 6 минут
Revin, Вот тема где давали решение.
Имитация зажатия клавиши
Там же есть ссылка на тему с винапи методами.



1



Revin

0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

07.01.2019, 22:41

 [ТС]

10

Вроде бы все хорошо, получается такой код:

C#
1
2
3
4
5
6
        private static void hotKeysEmulate()
        {
            press(VK_RSHIFT, VK_F10);
            Thread.Sleep(5000);
            release(VK_RSHIFT, VK_F10);
        }

Но проблема, ошибки:

C#
1
2
3
4
5
6
7
Ошибка    CS0103  Имя "press" не существует в текущем контексте.  
Ошибка    CS0103  Имя "VK_RSHIFT" не существует в текущем контексте.  
Ошибка    CS0103  Имя "VK_F10" не существует в текущем контексте. 
Ошибка    CS0103  Имя "Thread" не существует в текущем контексте. 
Ошибка    CS0103  Имя "release" не существует в текущем контексте.    
Ошибка    CS0103  Имя "VK_RSHIFT" не существует в текущем контексте.  
Ошибка    CS0103  Имя "VK_F10" не существует в текущем контексте.



0



534 / 344 / 116

Регистрация: 17.08.2014

Сообщений: 1,290

07.01.2019, 22:48

11

Revin,
ну пройдите же в тему по ссылке в этом же сообщении откуда код взяли. Там есть эти самые функции. Thread.Sleep я бы не стал использовать если приложение должно что то еще делать кроме как нажимать кнопку..



0



0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

07.01.2019, 22:55

 [ТС]

12

Andreyip, может я слепой, но не увидел того что мне надо



0



Andreyip

534 / 344 / 116

Регистрация: 17.08.2014

Сообщений: 1,290

08.01.2019, 00:57

13

Revin, там написано вот (тут-> ссылка на тему с винапи)
Эмуляция нажатия клавиш для неактивных WPF приложений или эмуляция глобальных горячих клавиш

а код нужный тут

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[DllImport("user32.dll")]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
 
        public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag
        public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag
 
        const int VK_RSHIFT = 0xA1;
        const int VK_F10 = 0x79;
 
        static void press(byte keyModifier, byte key)
        {
            keybd_event(keyModifier, 0, KEYEVENTF_EXTENDEDKEY, 0);
            keybd_event(key, 0, KEYEVENTF_EXTENDEDKEY, 0);
        }
        static void release(byte keyModifier, byte key)
        {
            keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
            keybd_event(keyModifier, 0, KEYEVENTF_KEYUP, 0);
        }

Добавлено через 3 минуты
Revin,
при этом клавишу w можно получить так

C#
1
byte key = (byte)Keys.W;



0



Revin

0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

08.01.2019, 16:58

 [ТС]

14

Andreyip, хорошо, но что означают:

C#
1
2
        public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag
        public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag



0



228 / 165 / 110

Регистрация: 09.11.2015

Сообщений: 454

08.01.2019, 17:55

15



0



0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

08.01.2019, 17:57

 [ТС]

16

Ellizio, не нашел там объяснения что означает 0x0001 и 0x0002



0



Andreyip

534 / 344 / 116

Регистрация: 17.08.2014

Сообщений: 1,290

08.01.2019, 18:36

17

Лучший ответ Сообщение было отмечено Revin как решение

Решение

Revin, Это значения флагов указывающее что кнопка нажата или отпущена. Вам в этом нет надобности разбираться. просто вызывайте методы Press Для нажатия и release для отпускания.
если вам не нужно нажатие нескольких клавиш перепишите методы Press по нажатие 1 клавиши.

C#
1
2
3
4
5
6
7
8
9
10
11
  static void press(byte key)
        {
           //нажимаем
            keybd_event(key, 0, KEYEVENTF_EXTENDEDKEY, 0);
        }
        static void release( byte key)
        {
// отпускаем
            keybd_event(key, 0, KEYEVENTF_KEYUP, 0);
         
        }

далее используем как то так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  private void button_Click(object sender, EventArgs e)
        {
            // удерживаем кнопку W полсекунды
            keypress((byte)Keys.W, 500);
 
        }
 
 
        void keypress(byte key, int timeout)
        {
            //нажимаем клавишу 
            press(key);
 
            //старутем таймер
            System.Windows.Forms.Timer T = new Timer();
            T.Interval = timeout; //записываем таймаут
            T.Tick += (O, o) => //используем делегат
            {
                // при срабатывании таймера отпускаем кнопу
                release(key);
                //тормозим таймер;
                T.Stop();
                //уничтожаем таймер
                T.Dispose();
                T = null; 
            };
            //стартуем таймер чтобы сработал тик
            T.Start();
 
        }



1



0 / 0 / 0

Регистрация: 27.05.2018

Сообщений: 53

08.01.2019, 21:55

 [ТС]

18

Andreyip, благодарю



0



534 / 344 / 116

Регистрация: 17.08.2014

Сообщений: 1,290

08.01.2019, 22:14

19

Revin, Главное чтобы все работало как нужно, остальное с опытом придет)



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

08.01.2019, 22:14

19

В общем нужно сформировать очередь из двадцати случайных элементов диапазона [-40, 40], вывести ее в dataGridView1, потом из списка удалить все отрицательные значения и вывести в dataGridView2. Для этого я пользуюсь формой и классом, в классе два метода.
Класс:

public class Queue
    {

        public int[] FirstQueue()  //Первый метод
        {
            Queue<int> first = new Queue<int>(); //Очередь
            Random ran = new Random();  //Рандом
            for (int i = 0; i < 20; i++)  //Заполняю очередь
            {
                first.Enqueue(ran.Next(-40, 40));
            }
            int[] array = first.ToArray();  //Делаю из очереди массив чтобы вывести в форму
            SecondQueue(first);  //Передаю очередь на второй метод
            return array; //Вывожу массив
        }        
        public int[] SecondQueue(Queue<int> input)  //Второй метод
        {

            ArrayList second = new ArrayList();   //Создаю список
            for (int i = 0; i < 20; i++)  
            { 
                if (second.Add(input.Dequeue()) >= 0)   //Пихаю в список только неотрицательные элементы
                {
                    second.Add(input.Dequeue());
                }
                else
                {
                    input.Dequeue();
                }
            }            
            int[] array2 = (int[])second.ToArray(typeof(int));  //Делаю из списка массив чтобы вывести в форму
            return array2;  //Вывожу
        }
    }

Форма:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            dataGridView1.RowCount = dataGridView2.RowCount = 1;  //Задаю количество и размеры строк и колонок и их размеры
            dataGridView1.ColumnCount = 20;
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
            {
                dataGridView1.Columns[i].Width = 40;
            }
            for (int i = 0; i < dataGridView2.Columns.Count; i++)
            {
                dataGridView2.Columns[i].Width = 40;
            }
        }

        Queue first = new Queue(); //Ссылка на класс
        
        private void ButtonRun_Click(object sender, EventArgs e)  //Первая кнопка
        {

            int[] array = first.FirstQueue();  //Присваиваю значение массива из первого метода
            for (int i = 0; i < 20; i++)
            {
                dataGridView1.Rows[0].Cells[i].Value = array[i];  //Вывожу в ячейки dataGridView через цикл
            }
        }

        private void ButtonDelete_Click(object sender, EventArgs e)
        {
            int[] array2 = first.SecondQueue();  //Пытаюсь присвоить массив, но пишет ошибку "Ошибка CS7036  Отсутствует аргумент, соответствующий требуемому формальному параметру "input" из "Queue.SecondQueue(Queue<int>)". "
            
            for (int i = 0; i < array2.Length; i++)  //Вывод
            {
                dataGridView2.Rows[0].Cells[i].Value = array2[i];
            }
        }

        private void ButtonClose_Click(object sender, EventArgs e)
        {
            Close();
        }
    }

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

It is because you created your Cell_Phone class with a constructor requiring three parameters but only pass one when the object is instantiated in Main class you only pass a brands enum.

As the constructor seems to populate the fields depending on the value of the enum you could probably get rid of the in productID and price parameters in the Cell_Phone constructor.

public Cell_Phone(int productID, double price, Brands brand)

Cell_Phone phone = new Cell_Phone(Brands.Xiaomi);

As follows

public Cell_Phone(Brands brand)

Cell_Phone phone = new Cell_Phone(Brands.Xiaomi);

Возможно, вам также будет интересно:

  • Ошибка cs1022 требуется определение типа или пространства имен либо признак конца файла
  • Ошибка cs1003 синтаксическая ошибка требуется
  • Ошибка cs1001 требуется идентификатор
  • Ошибка cs0263 разделяемые объявления не должны указывать различные базовые классы
  • Ошибка cs0246 не удалось найти тип или имя пространства имен

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии