29章:10 行でズバリ!! [C#] ファイルのドラッグ アンド ドロップ

    作成2013.04.22

     Silverlight アプリケーションとWPFアプリケーションのコードは完全互換ではなさそうですが、わずかな修正でSilverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換できます。
     ここでは、Silverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。
     10 行でズバリ!! [C#] ファイルのドラッグ アンド ドロップは下記の参照元情報から作成方法の説明と解説を参照できます。

  1. 参照元情報
     10 行でズバリ!! [C#] ファイルのドラッグ アンド ドロップ
    「10 行でズバリ!! [C#] ファイルのドラッグ アンド ドロップ」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. 10 行でズバリ!! [C#] ファイルのドラッグ アンド ドロップの完成ファイル
     10 行でズバリ!! [C#] ファイルのドラッグ アンド ドロップの解説とおりに作業を実施すると、C#プロジェクトファイル群が完成しますが、 ここでは、VBで作成したプログラムをC#言語に変換を基本とします。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [10 行でズバリ!! [C#] マウス イベントの制御]をダウンロードする。
     解凍すると「29DropFiles」フォルダーがあります。
    注(1)「29DropFiles」フォルダーの「DropFiles.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「DropFiles.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. DropFiles.slnの実行
    (1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)操作画面が表示されます。
    (4)任意のファイルを画面の上の欄にドラッグ するとDragEnterとファイル名が表示されます。
    (5)画面の上の欄から離れるとDragLeaveとファイル名が表示されます。
    (6)画面の上の欄にドロップするとDropとファイル名が表示されます。
    (7)クローズボックスで終了します。


  4. 新規プロジェクトの作成
    (1)MainWindow.xamlのデザイン設定
     新規プロジェクトを作成すると「デザイナー」にはMainWindow.xamlが自動生成されます。MainWindow.xamlのデザイン設定はVBのMainWindow.xamlのコピー&ペーストで完成します。

    (2) MainWindow.xaml.csコード
     基本コードが自動生成されます。


  5. MainWindow.xamlの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <Grid >
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />    
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0" Name="TextBlock1" TextAlignment="Center"
                       FontSize="20"
                       Text="ここにファイルをドロップしてください。"
                       TextWrapping="Wrap" AllowDrop="True" />
            <TextBox Grid.Row="1"  Name="TextBox1" TextWrapping="Wrap" />
        </Grid> 
    </Window>
    


  6. MainWindow.xamlコードの解説
    (1)<UserControl x:Class="MySilverlightApp.MainPage"が<Window x:Class="MainWindow"に変更となります。  (<Window x:Class="MainWindow"はWPFアプリケーションのデホルトです。)
    (2)その他変更ありませんが単純化しました。


  7. MainWindow.xaml.csの全コード
    using System;
    using System.Windows;
    
    namespace DropFiles
    {
        public partial class MainWindow : Window
        {
            IDataObject dataObj;
            String[] FileName;
    
            public MainWindow()
            {
                InitializeComponent();
                TextBlock1.AllowDrop = true;
                //TextBlock1.Drop +=  new DragEventHandler(TextBlock1_Drop);
                //TextBlock1.DragEnter += new DragEventHandler(TextBlock1_DragEnter);
                //TextBlock1.DragLeave += new DragEventHandler(TextBlock1_DragLeave);
            }
    
            private void TextBlock1_Drop(object sender, DragEventArgs e)
            {
                dataObj = e.Data as IDataObject;
                String[] FileName = dataObj.GetData(DataFormats.FileDrop) as String[];
                TextBox1.Text = "Drop  " + FileName[0];
            }
    
            private void TextBlock1_DragEnter(object sender, DragEventArgs e)
            {
                dataObj = e.Data as IDataObject;
                String[] FileName = dataObj.GetData(DataFormats.FileDrop) as String[];
                TextBox1.Text = "DragEnter  " + FileName[0];
            }
    
            private void TextBlock1_DragLeave(object sender, DragEventArgs e)
            {
                dataObj = e.Data as IDataObject;
                String[] FileName = dataObj.GetData(DataFormats.FileDrop) as String[];
                TextBox1.Text = "DragLeave  " + FileName[0];
            }
        }
    }
    


  8. MainWindow.xaml.csコードの解説
    (1)IDataObject dataObj;は変数dataObj を IDataObject型で生成します。これは、FileNameをえるためです。
    (2)String[] FileName;は変数FileName[]をString型配列で生成します。これは、FileName配列を文字列に変換するためです。
    (3)//TextBlock1.Drop += new DragEventHandler(TextBlock1_Drop);はTextblock1_Dropイベントを呼び出すために記載ですが、削除できます。
    (4)dataObj = e.Data as IDataObject;はe.DataをIDataObject型に変換してdataObj に代入します。
    (5)String[] FileName = dataObj.GetData(DataFormats.FileDrop) as String[];はドロップファイルのデータをFileNameのString型配列に代入します。
    (6)TextBox1.Text = "Drop " + FileName[0];でDropとファイル名を表示します。
    (7)Textblock1_DragEnterとTextblock1_DragLeaveも同様です。


    感想:
    (1)VBからC#への変換は少し記述の違いを感じました。







30章:10 行でズバリ!! [C#] マウス イベントの制御に行く。

トップページに戻る。