Compiler error cs0123

C# Compiler Error CS0123 – No overload for 'method' matches delegate 'delegate' and solution to fix in visual studio

C# Compiler Error

CS0123 – No overload for ‘method’ matches delegate ‘delegate’

Reason for the Error

This C# error will occur when you try to create a delegate in C# with in-correct signature.

For example, try compiling the below code snippet.

namespace DeveloperPublishNamespace
{
    delegate void Delegate1();

    public class DeveloperPublish
    {
        public static void function1(int i) { }
        public static void Main()
        {
            // Error because function1 takes an integer parameter while the delegate Delegate1 doesnot
            Delegate1 d = new Delegate1(function1);  
        }
    }
}

We have declared a delegate without a parameter and when we create an instance by passing a function with a different signature, you will see the below error.

Error CS0123 No overload for ‘function1’ matches delegate ‘Delegate1’ ConsoleApp1 C:UsersSenthilsourcereposConsoleApp1ConsoleApp1Program.cs 11 Active

C# Error CS0123 – No overload for 'method' matches delegate 'delegate'

If you are on .NET Mono, the error might look something like this

error CS0123: A method or delegate DeveloperPublishNamespace.DeveloperPublish.function1(int)' parameters do not match delegateDeveloperPublishNamespace.Delegate1()’ parameters

Solution

You can avoid this error by changing the access modifier of the Method to allow its access (if needed).

Permalink

Cannot retrieve contributors at this time

description title ms.date f1_keywords helpviewer_keywords ms.assetid

Compiler Error CS0123

Compiler Error CS0123

07/20/2015

CS0123

CS0123

57be2c58-6d87-40af-9376-cd7f91023044

Compiler Error CS0123

No overload for ‘method’ matches delegate ‘delegate’

An attempt to create a delegate failed because the correct signature was not used. Instances of a delegate must be declared with the same signature as the delegate declaration.

You can resolve this error by adjusting either the method or delegate signature. For more information, see Delegates.

The following sample generates CS0123.

// CS0123.cs  
delegate void D();  
delegate void D2(int i);  
  
public class C  
{  
   public static void f(int i) {}  
  
   public static void Main()  
   {  
      D d = new D(f);   // CS0123  
      D2 d2 = new D2(f);   // OK  
   }  
}  

CS0123: No overload for ‘addItems’ matches delegate ‘System.EventHandler’

protected void addItems(System.EventHandler e)
        {
            DropDownList numDropDown = (DropDownList) Page.FindControl("DropDownNum");

            foreach (numOption option in numConfigManager.numConfig.numOptions.Options)
            {
                numDropDown.Items.Add(option.Value);
            }
        }

Joel Coehoorn's user avatar

Joel Coehoorn

392k111 gold badges561 silver badges788 bronze badges

asked Dec 1, 2011 at 11:37

Pascal Bayer's user avatar

Pascal BayerPascal Bayer

2,5558 gold badges32 silver badges50 bronze badges

2

You haven’t shown anything called printListItems so it’s not clear where that comes in, but I suspect you just want to change the signature of your method to:

protected void addItems(object sender, EventArgs e)

… although you should also rename it to AddItems to follow .NET naming conventions.

answered Dec 1, 2011 at 11:41

Jon Skeet's user avatar

Jon SkeetJon Skeet

1.4m851 gold badges9045 silver badges9133 bronze badges

I think you messed up with the parameters of addItems if you visit EventHandlers you would know why

The standard signature of an event handler delegate defines a method that does not return a value, whose first parameter is of type Object and refers to the instance that raises the event, and whose second parameter is derived from type EventArgs and holds the event data. If the event does not generate event data, the second parameter is simply an instance of EventArgs. Otherwise, the second parameter is a custom type derived from EventArgs and supplies any fields or properties needed to hold the event data.

answered Dec 1, 2011 at 11:47

V4Vendetta's user avatar

  • Remove From My Forums
  • Question

  • Can’t shake this error.
    In Form.cs I define 

    protected void textBox3_KeyUp(object sender, KeyEventArgs e)
    {
       ;
    }

    In Form1.Designer.cs I define 


    this.TextBox3.KeyUp += new System.EventHandler( this.textBox3_KeyUp );

    The result is in Form1.Designer.cs I get this error: 

    error CS0123: No overload for ‘textBox3_KeyUp’ matches delegate ‘System.EventHandler’

    I am new to C# from the world of embedded controllers.  I tried to follow examples but can’t get this to work.  I have similar lines for defining _OnLostFocus and _TextChanged that work great. 

    What am I missing?

Answers

  •   You receive this error as the KeyUp Event does not call a System.EventHandler delegate but a System.Windows.Forms.KeyEventHandler.

    So

    this.textBox3.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox3_KeyUp);

    • Marked as answer by

      Friday, July 11, 2008 1:26 AM

Juliana619

0 / 0 / 0

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

Сообщений: 25

1

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

19.12.2017, 23:26. Показов 6201. Ответов 2

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


Подскажите, пожалуйста, что за ошибка и как с ней бороться?
Ошибка CS0123 Нет перегруженного метода для «Sum», который соответствует делегату «Form1.Mop».

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
namespace _1
{
    public partial class Form1 : Form
    {
        delegate void Mop(int[] x, ref int[] z);
 
        public class Metodi
        {
            public static void Sum(int[]x,ref int z)
            {
                for (int i = 0; i < x.Length - 1; i++)
                    z =+x[i];
            }
 
            public static void Max(int[]x,int z)
            {
                for (int i = 0; i < x.Length - 1; i++)
                    if (z < x[i]) z = x[i];
            }
 
            public static void Min(int[] x, int z)
            {
                for (int i = 0; i < x.Length - 1; i++)
                    if (z > x[i]) z = x[i];
            }
 
        }
 
        public Form1()
        {
            InitializeComponent();
            int[] a = new int[5] { 1, 2, 3, 4, 5 };
            int sum;
            sum = 0;
//Строчка, на которую ругается код
Mop summa = Metodi.Sum;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
        }  
    }
}

Строчку, в которой ошибка подчеркнула.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Администратор

Эксперт .NET

15248 / 12287 / 4904

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

Сообщений: 24,883

Записей в блоге: 1

19.12.2017, 23:51

2

Juliana619, у делегата второй аргумент ref int[] (массив), а у метода ref int (не массив) — отсюда и ошибка. Судя по коду нужно у делегата изменить тип второго аргумента.



1



0 / 0 / 0

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

Сообщений: 25

20.12.2017, 08:31

 [ТС]

3

Точно, большое спасибо. Какие глупости, оказывается(



0



Никакая перегрузка не соответствует делегату EventHandler, даже если аргументы в методе обработчика кажутся нормальными

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

Этот (сокращенный) фрагмент кода выдает ошибку CS0123 , показывая, что мой метод Knop_Click не соответствует делегату EventHandler .

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

2 ответа

Вы все неправильно понимаете. вам просто нужен соответствующий обработчик событий, прикрепленный к событию Click.

Теперь этот метод будет вызываться, когда кнопка запускает событие Click. вы не можете изменить подпись, потому что именно так кнопка запускает это событие. что-то вроде этого.

Теперь в Knop_Click вы получаете аргументы, которые только что передал Button.

Что вы ожидаете, если измените подпись? то, что вы хотите, не может быть достигнуто, потому что EventArgs является базовым классом, а Button передает EventArgs, его нельзя преобразовать в производный класс.

Вы должны пояснить, какова ваша цель. уточнить, какой код нужно написать, чтобы мы могли подобрать для него подходящее место

Когда вы добавляете обработчик к событию Click элемента управления (в данном случае Button , который вы вызываете Knop ), Button будет вызывать ваш обработчик, передавая это object sender, System.EventArgs e . Это означает, что:

невозможно определить ваш обработчик как принимающий ваш собственный класс событий вместо System.EventArgs ,

Если бы компилятор позволял вам это делать, у вас были бы настоящие проблемы, потому что Button все равно передавал бы System.EventArgs вашему обработчику, полностью игнорируя ваши пожелания получить вместо этого что-то еще.

Ваш план добавления кода в класс событий говорит мне, что, возможно, вы чего-то не поняли о событиях и передаче событий. Предполагается, что события несут данные, они не должны содержать код.

Как исправить эту ошибку — C# CS0123: перегрузка для «метода» не соответствует делегату «EventHandler»

Я пытаюсь передать имя программы из моей формы в событие нажатия кнопки. Но я продолжаю получать следующее сообщение об ошибке:

«Нет перегрузки для метода» соответствует делегату «EventHandler»

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

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

в чем ошибка компиляции??

Добавлено 08.03.11, 14:35

Не удалось найти имя типа или пространства имён «EventHandler»

Добавлено 08.03.11, 14:37
Да, я не знаю как автоматизировать то, чтобы обмен разрешался только соседним кнопкам. Их в принципе всего 16 — так что это не большая проблема.

конечно убрать. нет такого эвента

Что куда передать?? для чего этот аргумент вообще?

Добавлено 08.03.11, 15:02
ужасть ))

у вообще у контролов есть такая штука как Tag, он имеет тип object, а значит туда можно затолкать все что угодно, и использовать в наших целях. Итак:
всем кнопка программно задаем индекс в свойство Tag и попутно подсовываем обработчик нажатия:

—I want to draw circle inside rectangle but there is one problem I can’t solve.
—I’m new at programing so I need help.

this is the main code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace DrawCircleRectangle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //pen is used for border color
        Pen red = new Pen(Color.Red);
        Pen green = new Pen(Color.Green);

        //To fill the shape
        System.Drawing.SolidBrush fillRed = new System.Drawing.SolidBrush(Color.Red);
        System.Drawing.SolidBrush fillYelloq = new System.Drawing.SolidBrush(Color.Yellow);

        Rectangle rectangle = new Rectangle(50, 50, 220, 90);
        Rectangle circle = new Rectangle(50,50,220,90); 
       

        public void Form1_Load(object sender, PrintPageEventArgs e)
        {
            using (Graphics g = e.Graphics)
            {
                g.DrawRectangle(red, rectangle);    //draw rectangle
                g.DrawEllipse(green, circle);       //draw circle
            }
        }
    }
}




---But the problem is Form1.Designer 


using System;

namespace DrawCircleRectangle
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// 
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// 
        /// <param name="disposing" />true if managed resources should be disposed; otherwise, false.
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Name = "Form1";
            this.Text = "Form1";
            NewMethod();
            this.ResumeLayout(false);

        }

        private void NewMethod()
        {
            Form1 form11 = this;
            this.Load += new EventHandler(form11.Form1_Load);        }

        #endregion
    }
}

---I have bolded where the error occurred 
-- No overload for 'Form1_Load' matches delegate 'EventHandler'

What I have tried:

I have tried some solutions but they didn't work

RRS feed

  • Remove From My Forums
  • Вопрос

  • **this.videoSourcePlayer1.NewFrame
    += new
    AForge.Controls.VideoSourcePlayer.NewFrameHandler(this.videoSourcePlayer1_NewFrame);**

    • Перемещено
      Kristin Xie
      30 марта 2016 г. 8:32

Все ответы

  • Hi palash ingle,

    Because you use the third party VideoSourcePlayer class in your application, for more information, you can refer to the following link.

    http://www.aforgenet.com/framework/docs/html/bd272e5f-344c-56a5-f74f-1ac3062a9554.htm

    I am sorry that I move this case to off topic forum, because Visual C#  forum aims to discuss and ask questions about the C# programming language, IDE, libraries, samples, and tools.

    If you have any C# programming issues, please feel free to ask there and I will try my best to help.

    Best Regards,

    Alex


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

Понравилась статья? Поделить с друзьями:
  • Compiler error cs0030
  • Compiler error cs0029
  • Compiler error cs0019
  • Compiler error c2360
  • Compiler debug log error unable to generate contract bytecode and abilities