2
私は2つのパネルを持っていて、1つはロードで1つのコントロールを設定します。ユーザーがコントロールを他のパネルにドラッグすると、コントロールが元のパネルから新しいパネルに移動するため、コントロールのコピーを作成して別のパネルに配置するのが好きです。同じコントロールを複数回パネルにドラッグできるようにする必要があります。これを達成するにはどうすればいいですか?コピーするドラッグエフェクトを変更しようとしましたが、これはそのトリックを行うようには見えません。コピーの代わりにドラッグアンドドロップ移動コントロール
void panel_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
void panel_DragDrop(object sender, DragEventArgs e)
{
Button data = (Button)e.Data.GetData(typeof(Button));
FlowLayoutPanel _destination = (FlowLayoutPanel)sender;
FlowLayoutPanel _source = (FlowLayoutPanel)data.Parent;
if (_source != _destination)
{
// Add control to panel
data.Size = new Size(_destination.Width, 85);
_destination.Controls.Add(data);
// Reorder
Point p = _destination.PointToClient(new Point(e.X, e.Y));
var item = _destination.GetChildAtPoint(p);
int index = _destination.Controls.GetChildIndex(item, false);
_destination.Controls.SetChildIndex(data, index);
// Invalidate to paint!
_destination.Invalidate();
_source.Invalidate();
}
else
{
// Just add the control to the new panel.
// No need to remove from the other panel, this changes the Control.Parent property.
Point p = _destination.PointToClient(new Point(e.X, e.Y));
var item = _destination.GetChildAtPoint(p);
int index = _destination.Controls.GetChildIndex(item, false);
_destination.Controls.SetChildIndex(data, index);
_destination.Invalidate();
}
}
Winformsには、コントロールのコピーを作成するメカニズムはありません。 Controlクラスは完全に多くのプロパティを持ち、入れ子にするとさらに悪化します。代わりにコントロールを再作成する必要があります。ドラッグしたい元のパネルを作成するメソッドがあることを確認してください。ドラッグが完了したら、単にそのメソッドを再度実行します。 ParentとLocationの2つの引数が必要です。 –
これを見る:http://stackoverflow.com/questions/11407068/how-to-drag-and-drop-a-button-from-one-panel-to-another-panelよろしくお願いします。 jens – schwebbe