C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

エクスプローラからのドラッグ&ドロップで、ファイル名を取得

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■86135 / inTopicNo.1)  エクスプローラからのドラッグ&ドロップで、ファイル名を取得
  
□投稿者/ きみのぶ (21回)-(2017/12/20(Wed) 19:16:20)

分類:[.NET 全般] 

エクスプローラからのドラッグ&ドロップで、ファイル名を取得出来ません。

以下にコードを記述します。

XML)
<Window x:Class="KM_IconExtracter.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:KM_IconExtracter"
        Icon="Resource/favicon.ico"
        mc:Ignorable="d"
        Title="KM_IconExtracter" Height="600" Width="800"
        AllowDrop="True" Drop="Window_Drop" PreviewDragOver="Window_PreviewDragOver">
    
    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>
    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="20" />
            <RowDefinition Height="*" />
            <RowDefinition Height="23" />
        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Orientation="Horizontal" Background="{StaticResource WindowBackgroundBrush}">
            <Menu HorizontalAlignment="Stretch" Name="menu1" VerticalAlignment="Top"  >
                <MenuItem Header="_Application" >
                    <MenuItem Header="アイコン抽出" Command="{Binding ExtactIconCommand}" />
                    <Separator HorizontalAlignment="Stretch" />
                    <MenuItem Header="_Exit" Command="{Binding ExitCommand}" />
                </MenuItem>
            </Menu>
        </StackPanel>

        <ListView Name="listView1" HorizontalAlignment="Stretch" Grid.Row="1" VerticalAlignment="Stretch" 
                  ItemsSource="{Binding IconBitmapCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                  SelectedItem="{Binding SelectedItem}">

            <ListView.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="アイコンの保存" Click="SaveIcon_Click" />
                </ContextMenu>
            </ListView.ContextMenu>
            
    
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical" >
                        <Image Source="{Binding BitmapSource}" Width="40" Height="40"/>
                        <TextBlock Text="{Binding Index}" HorizontalAlignment="Center"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        
        <StatusBar Grid.Row="2">
            <StatusBarItem>
                <TextBlock Text="{Binding IconFile}" />
            </StatusBarItem>
        </StatusBar>
    </Grid>
</Window>


C#)
        private void Window_Drop(object sender, System.Windows.DragEventArgs e)
        {
            MainWindowViewModel viewModel = this.DataContext as MainWindowViewModel;

            String file = e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop, true) as String;
            if(file != null)  
            {
                viewModel.IconFile = file;
                viewModel.ExtractIcon();
            }
        }

このコードでファイルパスが取得出来ず、file変数はnullになってしまいます。
何がいけないのでしょうか?
アドバイスをお願い致します。

引用返信 編集キー/
■86136 / inTopicNo.2)  Re[1]: エクスプローラからのドラッグ&ドロップで、ファイル名を取得
□投稿者/ Hongliang (586回)-(2017/12/20(Wed) 19:36:14)
DataFormats.FileDropの場合、取得できるデータは常に string[] です。
引用返信 編集キー/
■86137 / inTopicNo.3)  Re[2]: エクスプローラからのドラッグ&ドロップで、ファイル名を取得
□投稿者/ きみのぶ (23回)-(2017/12/20(Wed) 19:45:05)
No86136 (Hongliang さん) に返信
> DataFormats.FileDropの場合、取得できるデータは常に string[] です。

Hongliang 様
いつもお世話になっております。
string[] にしたら、ファイルパスを取得出来ました。

まだまだ勉強不足な私ですが、次はエクスプローラへのドラッグ&ドロップを実装したいと考えております。
引用返信 編集キー/
■86138 / inTopicNo.4)  Re[3]: エクスプローラからのドラッグ&ドロップで、ファイル名を取得
□投稿者/ Hongliang (587回)-(2017/12/20(Wed) 22:00:01)
本題とは関係ないですが。
DataFormatsクラスはSystem.Windows名前空間直下にも定義されているので、WPFならこっちを使った方が素直でしょう。
// System.WindowsのもSystem.Windows.Formsのも、中身はOSで定義されているような文字列なので、どっちを使っても問題はないのですが。
引用返信 編集キー/
■86139 / inTopicNo.5)  Re[4]: エクスプローラからのドラッグ&ドロップで、ファイル名を取得
□投稿者/ きみのぶ (25回)-(2017/12/21(Thu) 08:45:42)
No86138 (Hongliang さん) に返信
> 本題とは関係ないですが。
> DataFormatsクラスはSystem.Windows名前空間直下にも定義されているので、WPFならこっちを使った方が素直でしょう。
> // System.WindowsのもSystem.Windows.Formsのも、中身はOSで定義されているような文字列なので、どっちを使っても問題はないのですが。

Hongliang 様
アドバイスありがとうございます。
どの名前空間を使っているのか、それを意識したプログラミングを心掛けます。
引用返信 編集キー/
■86144 / inTopicNo.6)  Re[5]: エクスプローラからのドラッグ&ドロップで、ファイル名を取得
□投稿者/ きみのぶ (28回)-(2017/12/21(Thu) 14:56:39)
No86139 (きみのぶ さん) に返信
> ■No86138 (Hongliang さん) に返信
>>本題とは関係ないですが。
>>DataFormatsクラスはSystem.Windows名前空間直下にも定義されているので、WPFならこっちを使った方が素直でしょう。
>>// System.WindowsのもSystem.Windows.Formsのも、中身はOSで定義されているような文字列なので、どっちを使っても問題はないのですが。
>
> Hongliang 様
> アドバイスありがとうございます。
> どの名前空間を使っているのか、それを意識したプログラミングを心掛けます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ