C# Windows Forms如何切换拖放操作
C# WindowsForms How to switch drag and drop operation
我有一个关于在 C#/Windows 表单中拖放的问题。
我有 2 个标签。 "labelPos25" 和 "labelPos32A"。我想通过拖放相互切换。所以拖拽后labelPos25的文本就是labelPos32A的文本,labelPos32A的文本就是labelPos25的文本
我创建了这些函数来在 labelPos32A 上移动 labelPos25:
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);
}
如何强制切换标签文本而不是移动?有什么办法吗?
您必须对 GetData
和 GetDataPresent
使用不同的重载。您可以使用 Type
作为参数,而不是 string
,然后您不仅可以访问 Text
,还可以访问整个 Label
..:[=21=]
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
..:[=21=]
Point p2 = ob2.Location;
ob2.Location = ob1.Location;
ob1.Location = p2;
我有一个关于在 C#/Windows 表单中拖放的问题。 我有 2 个标签。 "labelPos25" 和 "labelPos32A"。我想通过拖放相互切换。所以拖拽后labelPos25的文本就是labelPos32A的文本,labelPos32A的文本就是labelPos25的文本
我创建了这些函数来在 labelPos32A 上移动 labelPos25:
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);
}
如何强制切换标签文本而不是移动?有什么办法吗?
您必须对 GetData
和 GetDataPresent
使用不同的重载。您可以使用 Type
作为参数,而不是 string
,然后您不仅可以访问 Text
,还可以访问整个 Label
..:[=21=]
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
..:[=21=]
Point p2 = ob2.Location;
ob2.Location = ob1.Location;
ob1.Location = p2;