【转】【笔记】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.运行一下,就会发现消息框已经可以居中显示在父窗体了。

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

 

 下载地址:http://rrurl.cn/5NkH4A

 

 

posted @ 2012-06-26 19:33  chenfz.fz  阅读(1307)  评论(0编辑  收藏  举报