нет перегрузки для соответствия делегату 'system.eventhandler' MouseDown MouseUp MouseMove

Мне нужно создать метки в форме, зависящей от строки [] с именем «descripcio». Каждый параметр «descripcio» соответствует новой метке. Для каждой метки требуется три события: MouseDown, MouseUp и MouseMove. Одни и те же события для всех ярлыков. Код:

public FormEquip(string[] descripcio)
{
    InitializeComponent();
    this.descripcio = descripcio;
    inicialitza_descripcions();
}

private void inicialitza_descripcions()
{
    for (int i = 0; i < this.descripcio.Length; ++i)
    {
        System.Windows.Forms.Label Label = new System.Windows.Forms.Label();
        crea_label(ref Label2, 100, 50 * (i + 1), "D" + i, this.descripcio[i], 2 * i + 2);
        this.Controls.Add(Label);
    }
}

private void crea_label(ref System.Windows.Forms.Label Label, int x, int y, string nom, string text, int index)
{
    Label.AutoSize = true;
    Label.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
    Label.Location = new System.Drawing.Point(x, y);
    Label.Name = nom;
    Label.TabIndex = index;
    Label.Text = text;
    Label.Visible = true;
    Label.MouseDown += new System.EventHandler(Label_MouseDown);
    Label.MouseUp += new System.EventHandler(Label_MouseUp);
    Label.MouseMove += new System.EventHandler(Label_MouseMove);
}

private void Label_MouseDown(object sender, MouseEventArgs e)
{  
    this.isDragging = true;
}  

private void Label_MouseUp(object sender, MouseEventArgs e)
{
    this.isDragging = false;  
}  

private void Label_MouseMove(object sender, MouseEventArgs e)
{
    Control ctrl = sender as Control;  
    if (this.isDragging)  
    {  
        Point p1 = ctrl.PointToScreen(e.Location);  
        Point p2 = ctrl.Parent.PointToClient(p1);  
        ctrl.Location = p2;  
    }  
}

Этот код генерирует ошибку "нет перегрузки для "Label_MouseDown/Label_MouseUp/Label_MouseMove" соответствует делегату system.eventhandler" в этих трех строках:

    Label.MouseDown += new System.EventHandler(Label_MouseDown);
    Label.MouseUp += new System.EventHandler(Label_MouseUp);
    Label.MouseMove += new System.EventHandler(Label_MouseMove);

Первая строка «нет перегрузки для «Label_MouseDown» соответствует делегату« system.eventhandler »». Вторая строка «нет перегрузки для «Label_MouseUp» соответствует делегату« system.eventhandler »». Третья строка «нет перегрузки для «Label_MouseMove» соответствует делегату« system.eventhandler »».

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

Редактировать:

Наконец, мне нужно изменить только эту часть кода:

Label.MouseDown += new System.EventHandler(Label_MouseDown);
Label.MouseUp += new System.EventHandler(Label_MouseUp);
Label.MouseMove += new System.EventHandler(Label_MouseMove);

за:

Label.MouseDown += new System.Windows.Forms.MouseEventHandler(Label_MouseDown);
Label.MouseUp += new System.Windows.Forms.MouseEventHandler(Label_MouseUp);
Label.MouseMove += new System.Windows.Forms.MouseEventHandler(Label_MouseMove);

Это все. Спасибо HuorSwords.


person negu    schedule 17.04.2013    source источник


Ответы (1)


Ваши Label_MouseDown, Label_MouseUp и Label_MouseMove не реализуют System.EventHandler контракт, который должен быть:

void Label_MouseDown(object sender, EventArgs e)
void Label_MouseMove(object sender, EventArgs e)
void Label_MouseUp(object sender, EventArgs e)

Кроме того, вы должны привести параметр EventArgs к MouseEventArgs, чтобы использовать его в своих методах (на самом деле вы используете его только в своем методе Label_MouseMove).

person HuorSwords    schedule 17.04.2013
comment
Наконец, мне нужно только изменить - person negu; 17.04.2013