您的位置:首页 > 其它

实现拖动文件到窗体(控件)

2015-05-21 16:16 417 查看

前言

实现从窗口外部拖文件到窗口内部并自动捕获文件地址。

第一步 开启属性

启用底层
Window
AllowDrop
属性,添加
Drop
事件。

Drop
事件:当你拖动文件到对应控件后,松开触发。


Drop
事件外,我们还可以使用
DragEnter
DragOver
DragLeave
三个事件。


第二步 事件代码

private void MainWindow_Drop(object sender, DragEventArgs e)
{
string msg = "Drop";
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
msg = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
}

MessageBox.Show(msg);
}


实例1:

在WPF中的实现和WinForm中的实现99%相似,将要实现接受拖拽释放的控件添加DragEnter事件和Drop事件,本例中控件Grid grid作为接受控件,添加事件操作如下:

private void grid_Drop(object sender, DragEventArgs e)
{
string fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
//获得文件名后的操作...
}

private void grid_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effects = DragDropEffects.Link;                            //WinForm中为e.Effect = DragDropEffects.Link
else e.Effects = DragDropEffects.None;                      //WinFrom中为e.Effect = DragDropEffects.None
}


实例2:

<Window x:Class="GetPixelFormat.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="获取图片的像素格式" Height="450" Width="565">
<Grid  DragEnter="Grid_DragEnter" Drop="Grid_Drop"  Background="White"
>
<Label Content="获取图片的PixelFormat(1.0支持单个文件拖入)"
HorizontalAlignment="Left"
Margin="155,19,0,0" VerticalAlignment="Top"/>
<Label Content="文件名:" HorizontalAlignment="Left" Margin="109,68,0,0" VerticalAlignment="Top"/>
<Label Name="lblFileName"  Content="Label" HorizontalAlignment="Left" Margin="173,68,0,0" VerticalAlignment="Top" FontFamily="Microsoft YaHei"/>
<Label Content="PixelFormat:" HorizontalAlignment="Left" Margin="87,129,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.697,0.627"/>
<Label Name="lblPixedFormat" Content="Label" HorizontalAlignment="Left" Margin="173,129,0,0" VerticalAlignment="Top" FontFamily="Microsoft YaHei"/>
<Label Content="图片对象:" HorizontalAlignment="Left" Margin="97,200,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.016,-0.604"/>
<Border BorderBrush="#FFD4FBFD"
BorderThickness="1"
HorizontalAlignment="Left"
Margin="181,200,0,0"
VerticalAlignment="Top"
>
<Image Name="imgOne"
HorizontalAlignment="Left"
VerticalAlignment="Top"  />
</Border>
</Grid>
</Window>


/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

//启用接收 拖放
this.AllowDrop = true;
}

private void Grid_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effects = DragDropEffects.Link;
else
{
e.Effects = DragDropEffects.None;
lblFileName.Foreground = System.Windows.Media.Brushes.Red;
lblFileName.Content = "拖入的内容不是文件";
}
}

private void Grid_Drop(object sender, DragEventArgs e)
{
System.Array array = e.Data.GetData(DataFormats.FileDrop) as Array;
string fileName = array.GetValue(0).ToString();
lblFileName.Content = fileName;
//获取图片
System.Drawing.Bitmap bit = new Bitmap(fileName);

//获取图片的格式
lblPixedFormat.Content = bit.PixelFormat;

//显示图片
IntPtr hBitmap = bit.GetHbitmap();
ImageSource imgS = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions()
);

imgOne.Source = imgS;
}
}


显示结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: