问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#中如何进行两个listbox之间内容的拖动。请高手指教。谢谢啦!_百度知 ...

发布网友 发布时间:2022-05-18 07:11

我来回答

4个回答

热心网友 时间:2022-05-19 18:35

以下内容摘自《C#编程指南》第7章,清华大学出版社2011年1月

例7-6 在窗体添加两个ListBox,接受默认名。程序演示在ListBox控件之间的拖放操作。当拖动启动时,调用DoDragDrop方法。如果鼠标位置移动的距离大于DragSize,则启动拖动动作。IndexFromPoint方法确定拖动项的索引。

在Form1类添加以下变量,将下面的代码放在Form1构造函数的上方:

private int indexOfItemUnderMouseToDrag;

private int indexOfItemUnderMouseToDrop; 

private Rectangle dragBoxFromMouseDown;

private Point screenOffset;

首先对拖动源的ListBox添加项目和事件,用属性管理器对源listBox的Items添加one、two、three…等10个项目。展开属性管理器的事件栏,添加与拖动有关的事件,这些事件方法的代码如下:

private void listBox1_MouseDown(object sender, MouseEventArgs e)

{

  //获取鼠标选择控件的索引

  indexOfItemUnderMouseToDrag = listBox1.IndexFromPoint(e.X, e.Y);

  if (indexOfItemUnderMouseToDrag != ListBox.NoMatches)

  {

    Size dragSize = SystemInformation.DragSize;

    dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),

      e.Y - (dragSize.Height / 2)), dragSize);

  }

  else

    dragBoxFromMouseDown = Rectangle.Empty;

}

private void listBox1_MouseUp(object sender, MouseEventArgs e)

{

  dragBoxFromMouseDown = Rectangle.Empty;

}

private void listBox1_MouseMove(object sender, MouseEventArgs e)

{

  if ((e.Button & MouseButtons.Left) == MouseButtons.Left)

  {

    if (dragBoxFromMouseDown != Rectangle.Empty &&

      !dragBoxFromMouseDown.Contains(e.X, e.Y))

    {

        screenOffset = SystemInformation.WorkingArea.Location;

        DragDropEffects dropEffect = listBox1.DoDragDrop(

          listBox1.Items[indexOfItemUnderMouseToDrag],

          DragDropEffects.All | DragDropEffects.Link);

        if (dropEffect == DragDropEffects.Move)

        {

          listBox1.Items.RemoveAt(indexOfItemUnderMouseToDrag);

          if (indexOfItemUnderMouseToDrag > 0)

            listBox1.SelectedIndex = indexOfItemUnderMouseToDrag - 1;

          else if (listBox1.Items.Count > 0)

            listBox1.SelectedIndex = 0;    //选择第一项

      } } } 

}

private void listBox1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)

{

  ListBox lb = sender as ListBox;

  if (lb != null)

  {

    Form f = lb.FindForm();

    if (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) ||

      ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) ||

      ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) ||

      ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom))

    {

      e.Action = DragAction.Cancel;

    } } 

}

再对接受拖动对象的listBox2设置属性和事件, AllowDrop属性设置为true,允许接受拖来的项目。

键盘状态在DragOver事件处理程序中计算,以确定基于Shift、Ctrl、Alt或Ctrl+Alt键的状态将发生哪种拖动操作。放置位置也在DragOver事件期间确定。如果要放置的数据不是String,则DragDropEffects中将把DragEventArgs.Effect设置为None。最后,停放状态在dropLocationLabelLabel中显示。

要放置的数据在DragDrop事件处理程序中确定,并且在ListBox中的适当位置添加该String值。如果拖动操作移动到窗体边框的外面,则QueryContinueDrag事件处理程序中将取消拖放操作。

用属性管理器对目的ListBox添加与拖动有关的事件,这些方法的代码如下:

private void listBox2_DragOver(object sender, DragEventArgs e)

{

  //检查字符串是否存在,如果不存在拖动不能发生

  if (!e.Data.GetDataPresent(typeof(System.String)))

  {

    e.Effect = DragDropEffects.None;

    return;

  }

  if ((e.KeyState & (8 + 32)) == (8 + 32) &&

    (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)

    //KeyState 8 + 32 = CTL + ALT,连接拖动

    e.Effect = DragDropEffects.Link;

  else if ((e.KeyState & 32) == 32 && (e.AllowedEffect & DragDropEffects.Link) == 

    DragDropEffects.Link)

    e.Effect = DragDropEffects.Link;

  else if ((e.KeyState & 4) == 4 && (e.AllowedEffect & DragDropEffects.Move) == 

    DragDropEffects.Move)

    e.Effect = DragDropEffects.Move;      //键盘SHIFT状态用于移动

  else if ((e.KeyState & 8) == 8 && (e.AllowedEffect & DragDropEffects.Copy) == 

    DragDropEffects.Copy)

    e.Effect = DragDropEffects.Copy;       //CTL KeyState for copy

  else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)

    e.Effect = DragDropEffects.Move;

  else

    e.Effect = DragDropEffects.None;

  indexOfItemUnderMouseToDrop =

    listBox2.IndexFromPoint(listBox2.PointToClient(new Point(e.X, e.Y)));

}

private void listBox2_DragDrop(object sender, DragEventArgs e)

{

  //确保ListBox的项目索引包含在数据中

  if (e.Data.GetDataPresent(typeof(System.String)))

  {

    Object item = (object)e.Data.GetData(typeof(System.String));

    //允许拖动和放置取决于effect事件

    if (e.Effect == DragDropEffects.Copy || e.Effect == DragDropEffects.Move)

    {

      //插入项目

      if (indexOfItemUnderMouseToDrop != ListBox.NoMatches)

        listBox2.Items.Insert(indexOfItemUnderMouseToDrop, item);

      else

        listBox2.Items.Add(item);

    }

  }

}

运行结果如图7-10所示。

热心网友 时间:2022-05-19 19:53

你是说将两个listBox(a,b)里的东西相互添加吧。
先选中你要从aListbox中添加到bListbox的内容(这样只能一个个的添加),在判断b中有没有,如果有就不添加否则就添加
将从a中选中的内容赋值给一个字符串的变量名,如:
string str=listboxa.text;
if (lslistboxb.Items.Contains(str))
{
MessageBox.Show("已有!", "消息框");
}
else
{
listboxb.Items.Add(str);
}
也可以将listboxa中全部加到listboxb中(就是一次性全部加过去)!

热心网友 时间:2022-05-19 21:28

foreach (var item in listBox2.Items)
            {
                listBox1.Items.Add(item);
            }
            listBox2.Items.Clear();

热心网友 时间:2022-05-19 23:19

.com上有好多例子
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 鼠标文件的中英问对照?? 英语中非延续性动词有什么,越多越好,一定要对啊 已知线性表(a1,a2,a3, …,an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负数?C movelink 和 movecount的区别 苹果6s手机掉了就黑屏了,亮屏也是黑的,是不是内屏坏了,屏幕完好无损? 法院错判需要赔偿吗 公民被错误判刑,能要求赔偿吗? 在我国错误执行能否申请国家赔偿? 法院错误执行申请国家赔偿的依据 判决书错误导致损失的,法院要承担什么样的责任? 湿热伤阴症状,咨询日常饮食调理方法 遇到法官错判怎么处理 法官错判给当事人造成损失该怎么办 法官犯法判错了官司给我造成巨大损失谁来赔? 因法院判决错误造成原告财产损失应由什么机关赔偿? 法院判决追究刑事责任后能申请国家赔偿吗? 冬天什么颜色的打底裤好搭配衣服 表面积是54立方厘米的正方体,他的体积是多少立方厘米,还有3x3是什么意思 法院执行错误可以申请国家赔偿吗 法院要对错误判决承担赔偿责任吗 鼠标属性里指针项的英文翻译? 为什么格力空调制冷湿度不降反升? 求一首歌,英文的,*部分有 every 沙啦啦啦,女生的,有次上过天天向上的,和move 用火狐如何拖动搜索 派派英文名怎么取 在线起英文名软件 莫小沫 origin箱线图怎么剔除异常值 电脑的启动盘是什么?如何制作? 褪黑色维生素B6有咀嚼片 关于笔记本内存条的问题! 多种维生素咀嚼片作用 关于笔记本加内存条的问题? 接什么什么断成语? 关于笔记本插内存条的问题 脸上有痘痘痘印,有时还会痒,吃维生素c维生素b6和锌咀嚼片可以吗?有没有什么副作用? 接什么断四字词 怎么找晚上8点到11点的兼职? 接什么什么什么的成语 刘邦为什么要杀樊哙? 情同手足的樊哙为何被刘邦在临死前下令处死?