数据或控件拖拽实现之C#设计笔记(三)

总体思路:确定拖拽来源与目标范围
实例:将某控件区的数据(来源)拖拽到指定范围控件(目标)上并配置相应功能。
在这里插入图片描述
1、来源控件panel_senddata(属性AllowDrop设置为false)中分别注册事件panel_senddata_MouseUp、panel_senddata_MouseDown、panel_senddata_MouseMove

private Rectangle dragBox;
private void panel_senddata_MouseMove(object sender, MouseEventArgs e)
{
if (MouseButtons.Left == (e.Button & MouseButtons.Left))
{
if (dragBox != Rectangle.Empty && !dragBox.Contains(e.X, e.Y))
{
var effect = panel_senddata.DoDragDrop(panel_senddata.Text, DragDropEffects.All | DragDropEffects.Link);
if (effect == DragDropEffects.Move)
{
panel_senddata.Text = “”;
}
}
}
}
private void panel_senddata_MouseUp(object sender, MouseEventArgs e)
{
dragBox = Rectangle.Empty;
}
private void panel_senddata_MouseDown(object sender, MouseEventArgs e)
{
dragBox = new Rectangle(new Point(e.X - (SystemInformation.DragSize.Width / 2), e.Y - (SystemInformation.DragSize.Height / 2)), SystemInformation.DragSize);
}
2、配置目标范围区控件都允许AllowDrop
groupBox.Controls[i].AllowDrop = true;
3、目标范围区控件注册如下相关事件:
groupBox.Controls[i].DragEnter += Form_DragEnter;
groupBox.Controls[i].DragOver += Form_DragOver;
groupBox.Controls[i].DragDrop += Form_DragDrop;
groupBox.Controls[i].MouseEnter += Form_MouseEnter;
groupBox.Controls[i].MouseHover += Form_MouseEnter;
groupBox.Controls[i].MouseLeave += Form_MouseLeave;
4、目标区控件事件实现:
private void Form_DragOver(object sender, DragEventArgs e)
{
if (DragDropEffects.Copy == (e.AllowedEffect & DragDropEffects.Copy))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void Form_DragEnter(object sender, DragEventArgs e)
{
if (!e.Data.GetDataPresent(typeof(string)))
{
e.Effect = DragDropEffects.None;
}
}
private void Form_DragDrop(object sender, DragEventArgs e)
{
//throw new NotImplementedException();
Console.WriteLine($“{e.Effect}:{(string)e.Data.GetData(typeof(string))}”);
}
private void CANForm_MouseLeave(object sender, EventArgs e)
{
label1_tip.Text=“”;
}
private void CANForm_MouseEnter(object sender, EventArgs e)
{
label1_tip.Text += “提示内容”;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值