2013-04-17 31 views
1

我必須根據稱爲「descripcio」的字符串[]形式創建標籤。 「descripcio」的每個參數對應一個新標籤。 每個標籤需要三個事件,MouseDown,MouseUp和MouseMove。所有標籤的相同事件。的代碼是:沒有重載匹配委託'system.eventhandler'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」的第二行「no overload」與委託「system.eventhandler」匹配。 「Label_MouseMove」的第三行「no overload」與委託「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。

回答

1

Label_MouseDownLabel_MouseUpLabel_MouseMove不在實施System.EventHandlercontract,那一定是:

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方法)。

+0

最後,我只需要改變 – negu

相關問題