基本的に、状況は次のとおりです。FormA には UserControl (5 つのラベルと picbox を含む) があり、「cardShowing」という名前が付けられています。
private void cardShowing_MouseDown(object sender, MouseEventArgs e)
{
DoDragDrop(cardShowing, DragDropEffects.Copy);
}
FormB はドラッグのターゲットです
private void HandForm_DragDrop(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
CardControl card = (CardControl)e.Data.GetData(typeof(CardControl));
card.BorderStyle = BorderStyle.FixedSingle;
card.Location = new Point(cardControl3.Location.X + 187, cardControl1.Location.Y);
//cardControl1 and 3 are other controls already present on FormB
this.Controls.Add(card);//add the card to the controls colection
}
最後に、結果は FormA が制御を失い、FormB がそれを取得します (効果は「コピー」ですが)。ただし、プロパティはデフォルトに変更されます。 「なし」に変わります。同じことが「場所」プロパティにも当てはまります。
ここで、私がやりたいことは、コントロールを元の形から切り離さず、実際のプロパティを転送することです。
編集 問題が次の行にあることがわかりました:
CardControl card = (CardControl)e.Data.GetData(typeof(CardControl));
これは、常に null であるためです。ユーザーコントロールではなく、作成したさまざまなクラスでこれを試しましたが、それでもnullが返されます。なぜこれが起こるのか誰にも手がかりがありますか?