zoukankan      html  css  js  c++  java
  • 鼠标拖动事件之从ButtonN到TextBox

           所有的拖放操作都以拖动开始,对象的DoDragDrop方法实现了拖动开始时的数据收集功能.(ListViewTreeView控件具有ItemDrag事件)

      :

    MouseDown事件启动拖动操作(最直观的启动事件), 使用DoDragDrop设置将被拖动的数据和拖放效果:

    this.button1.MouseDown+=new MouseEventHandler(button1_MouseDown);

     

    private void button1_MouseDown(object sender, MouseEventArgs e)

    {

           button1.DoDragDrop(button1.Text,DragDropEffects.Copy|DragDropEffects.Move);

    }


            拖动开始于按钮控件,被拖动的数据为字符串(Button控件的Text属性),允许的拖动效果为复制或移动.任何数据都可以被作为DoDragDrop方法的参数.

        拖动操作开始后,开始处理QueryContinueDrag事件,以向系统请求继续拖动操作的许可.

        现在未真正实现拖放,因为目前不存在可接受被拖动数据的目标.

     

    放置数据

    Windows窗体或控件中的任何区域都可以接受数据,是需要将其AllowDrop属性设置为true,并处理DragEnterDragDrop事件即可.

    步骤如下:

    A.将窗体或控件的AllowDrop属性设置为true.

    B添加DragEnter事件

    this.textBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.textBox1_DragEnter);

            

    private void textBox1_DragEnter(object sender, DragEventArgs e)

    {      
            
    if(e.Data.GetDataPresent(DataFormats.Text))

            {      

                      e.Effect=DragDropEffects.Copy;

            }

            else

            {        

                    e.Effect=DragDropEffects.None;

            }

    }

    Cif执行类型检查,确保数据是可以接受的类型,然后设置DragDropEffects枚举,以指定放置发生时的效果.

    D为文本框添加DragDrop事件

    this.textBox1.DragDrop+=new DragEventHandler(textBox1_DragDrop);

     

    private void textBox1_DragDrop(object sender, DragEventArgs e)

    {

            textBox1.Text=e.Data.GetData(DataFormats.Text).ToString();

    }

    使用GetData方法获取被放置的数据.(文本框的Text属性设置为被放置的文本)

    E鼠标移动到文本框时,鼠标指针变成可添加标志,激发事件为文本框控件的DragEnter,

      松开鼠标左键, Text属性被赋值,激发事件为文本框控件的DragDrop

    F拖放中,根据KeyState属性决定拖放操作的具体效果.Ctrl执行复制操作


    G Effect属性可设置为DragDropEffects枚举
        All         从拖动源复制或移除数据,并将其滚动到放置目标中
        Copy     复制 
        Link       链接
        Move     移动
        None     放置目标不接受该数据
        Scroll     将在放置目标中开始滚动或当前正在滚动
  • 相关阅读:
    nodejs async waterfull 小白向
    nodejs async series 小白向
    MySQL 分区介绍总结
    cocos2d-x 一些实用的函数
    LeetCode(61)-Valid Palindrome
    ganglia错误解决
    (6)uboot具体解释——关闭缓存和mmu
    Linux下设置MySQL不区分大写和小写
    火狐与IE的7个JavaScript差异
    商业研究(8):汽车交通
  • 原文地址:https://www.cnblogs.com/Amor/p/216756.html
Copyright © 2011-2022 走看看