「descripcio」と呼ばれる文字列[]に応じて、フォームにラベルを作成する必要があります。「descripcio」の各パラメータは、新しいラベルに対応しています。各ラベルには、MouseDown、MouseUp、MouseMove の 3 つのイベントが必要です。すべてのラベルで同じイベント。コードは次のとおりです。
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;
}
}
このコードは、次の 3 行で「"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」に一致しません」。2行目「「Label_MouseUp」のオーバーロードはデリゲート「system.eventhandler」に一致しません」。3行目「「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 に感謝します。