zoukankan      html  css  js  c++  java
  • 实现拖动文件到窗体(控件)

    前言

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

    第一步 开启属性

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

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

    Drop事件外,我们还可以使用DragEnterDragOverDragLeave三个事件。

    第二步 事件代码

    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;
            }
        }

    显示结果:

    更多参考:

    http://www.cnblogs.com/tianma3798/p/4520033.html

    Wpf 鼠标拖动元素实例

  • 相关阅读:
    学会企业分析
    股票暴跌,收益会更高
    富人?中产?
    学会看财务报表
    财务自由三大核心工具
    理财工具分类
    webpack构建速度和体积极限优化
    将搜索时间设置为23:59:59
    省市区县街道四级联动下拉菜单
    用原生JS实现多张图片上传及预览功能(兼容IE8)
  • 原文地址:https://www.cnblogs.com/tianma3798/p/4520043.html
Copyright © 2011-2022 走看看