我对C#/ Windows窗体中的拖放有疑问。 我有2个标签。 “ labelPos25”和“ labelPos32A”。我想通过拖放相互切换。因此,在拖放之后,labelPos25的文本为labelPos32A的文本,labelPos32A的文本为labelPos25的文本。
我已经创建了以下函数来将labelPos25移动到labelPos32A上:
private void LabelPos32A_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Move;
}
private void LabelPos32A_DragDrop(object sender, DragEventArgs e)
{
var ob = sender as Label;
ob.Text = (string)e.Data.GetData(DataFormats.Text);
}
private void LabelPos25_MouseDown_1(object sender, MouseEventArgs e)
{
var ob = sender as Label;
DoDragDrop(ob.Text, DragDropEffects.Move);
}
如何强制切换标签文本而不是移动?有什么办法吗?
答案 0 :(得分:0)
GetData
和GetDataPresent
必须使用不同的重载。除了使用string
作为参数之外,还可以使用Type
作为参数,然后不仅可以访问Text
,还可以访问整个Label
..:
private void LabelPos32A_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Label))) e.Effect = DragDropEffects.Move;
}
private void LabelPos32A_DragDrop(object sender, DragEventArgs e)
{
var ob2 = sender as Label;
var ob1 = (Label)e.Data.GetData(typeof(Label));
string s2 = ob2.Text;
ob2.Text = ob1.Text;
ob1.Text = s2;
}
private void LabelPos25_MouseDown_1(object sender, MouseEventArgs e)
{
var ob = sender as Label;
DoDragDrop(ob, DragDropEffects.Move);
}
如果您愿意,也可以自己切换两个Labels
,即不仅可以切换Text
,还可以切换Location
..
Point p2 = ob2.Location;
ob2.Location = ob1.Location;
ob1.Location = p2;