zoukankan      html  css  js  c++  java
  • 【笔记】C#实现拖拽功能+MessageBox居父窗口中显示

    首先,这个拖拽功能是我今天早上突然想到的。我想我能不能做呢。事实上C#上实现确实很简单。

    拖出一个窗体。然后需要实现窗体的DragDrop和DragEnter方法。具体代码如下

            private void Form1_DragDrop(object sender, DragEventArgs e)
    {
    string path = ((Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); //检索与指定的数据格式关联的数据。
    MsgBox.Show(path);
    }

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {

    if (e.Data.GetDataPresent(DataFormats.FileDrop)) //如果此实例中存储的数据与指定的格式关联,或者可以转换成指定的格式,则为 true;否则为 false。
    e.Effect = DragDropEffects.Link; //默认情况下,在此属性中指定的效果将确定拖放操作目标的鼠标光标。 这可用来向用户提供有关操作的反馈,该操作将在放下对应的对象时发生。
    else e.Effect = DragDropEffects.None;
    }
    }

    第一句话是得到拖拽事件e和filedrop相关的数据。返回为object,强制转换成数组,然后取第一部分数据就可以了。第二句可能你已经注意到了。这个MessageBox了。他不是系统的。而是一个外来引用的。主要是系统的messagebox只能居于屏幕中间。我想让他居于父窗体中间,简单的方法可能是我不知道。其实可以使用获取窗口位置然后继承系统的MessageBox来实现一个自己的。我呢。直接去codeproject找个现成的。一会就说怎么导入。

    第二个方法里面主要是实现当拖拽至窗体释放后触发的事件。判断e里面的数据是不是FileDrop类型。然后设置鼠标为一个链接标志。否则为空

    现在说Messagebox。这个messagebox支持各种定制的信息显示。可以看看这个文章这个我已经提取到工程目录了。如果你需要使用这个类,需要这样做。我也是摸索的。。

    1.打开你自己需要使用该messagebox的工程,然后在解决方案上如下图所知点击。

    然后定位到DialogBox目录。也就是我将要导入的。然后打开DialogBox.csproj然后解决方案视图就有这个工程了

    2.点击主工程,也就是我这里的drop工程的引用

    添加引用,然后再弹出的项目选项卡就能显示出我们第一步的那个工程了

    确定即可

    3.最后一步,在Form1.cs也就是主工程的主文件里使用导入工程的命名空间using CodeProject.Dialog;

    这个我是看了源码看到的。CodeProject是作者定义的命名空间。

    4.然后就可以像使用系统的MessageBox一样使用这个了。不过这里是MsgBox.运行一下,就会发现消息框已经可以居中显示在父窗体了。

     有错误希望博友们指教。。毕竟菜鸟一只。。

    下载地址:Drop.7z

  • 相关阅读:
    深度学习学习总结
    线性回归学习总结
    机器学习常用算法总结
    2020年,给自己立个flag
    与博客添网易云外钟墯之坑
    给博客添加网易云外链时掉的坑
    BEGINNING
    【华为云技术分享】程序员真香定律:源码即设计
    【华为云技术分享】【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题
    差点被祭天!狂欢618,且看研发人如何绝地求生
  • 原文地址:https://www.cnblogs.com/lazycoding/p/2427709.html
Copyright © 2011-2022 走看看