27章:チュートリアル26:ファイルのドラッグ アンド ドロップ(VB)

    作成2013.03.28

     ここでは、Silverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。

  1. 参照元情報
     ファイルのドラッグ アンド ドロップ(Visual Basic ガイド ツアー)
    「ファイルのドラッグ アンド ドロップ」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. コントロール間の連携
     ファイルのドラッグ アンド ドロップの解説とおりにWPFアプリケーションを作成すると、互換性の問題でエラーが発生しますが、僅かな修正で動作するようになります。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [ファイルのドラッグ アンド ドロップ]をダウンロードする。
     解凍すると「27DropFiles」フォルダーがあります。
    注(1)「27DropFiles」フォルダーの「DropFiles.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「DropFiles.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


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


  4. 新規プロジェクトの作成
    (1)新規プロジェクト
     新規プロジェクトを作成すると「デザイナー」にはとXAMLが自動生成されます。

    (2)XAMLコードの作成
     サンプルのXAMLコードをコピーして、ペーストすると完成します。

    (3) クラスコード
    Class MainWindow
    End Class
    が自動生成されます。

    (4) その他
     サンプルのXAMLコードをコピーして、ペーストすると簡単に完成しますが、互換性の問題でエラーが発生します。エラーの原因を修正すると動作するようになります。
     エラーの原因を修正は学習に有効な作業となります。


  5. 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. XAMLのポイント
    (1)<UserControl x:Class="MySilverlightApp.MainPage"が<Window x:Class="MainWindow"に変更となります。  (<Window x:Class="MainWindow"はWPFアプリケーションのデホルトです。)
    (2)その他変更ありませんが単純化しました。


  7. Class MainWindowクラスの全コード
    Class MainWindow
        Dim dataObj As IDataObject
        Dim FileName() As String
    
        Public Sub New()
            ' この呼び出しはデザイナーで必要です。
            InitializeComponent()
            AddHandler TextBlock1.Drop, AddressOf Textblock1_Drop
            AddHandler TextBlock1.DragEnter, AddressOf Textblock1_DragEnter
            AddHandler TextBlock1.DragLeave, AddressOf Textblock1_DragLeave
        End Sub
    
        Private Sub Textblock1_Drop(ByVal sender As Object, ByVal e As DragEventArgs)
            dataObj = CType(e.Data, IDataObject)
            FileName = dataObj.GetData(DataFormats.FileDrop)
            TextBox1.Text = "Drop  " & FileName(0)
        End Sub
    
        Private Sub Textblock1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs)
            dataObj = CType(e.Data, IDataObject)
            FileName = dataObj.GetData(DataFormats.FileDrop)
            TextBox1.Text = "DragEnter  " & FileName(0)
        End Sub
    
        Private Sub Textblock1_DragLeave(ByVal sender As Object, ByVal e As DragEventArgs)
            dataObj = CType(e.Data, IDataObject)
            FileName = dataObj.GetData(DataFormats.FileDrop)
            TextBox1.Text = "DragLeave  " & FileName(0)
        End Sub
    End Class
    


  8. Class MainWindowクラスのコード解説
    (1)Dim dataObj As IDataObjectは変数dataObj を IDataObject型で生成します。これは、FileNameをえるためです。
    (2)Dim FileName() As Stringは変数FileNameをString型配列で生成します。これは、FileName配列を文字列に変換するためです。
    (3)AddHandler TextBlock1.Drop, AddressOf Textblock1_DropはTextblock1_Dropイベントを呼び出すために記載します。
    (4) dataObj = CType(e.Data, IDataObject)はe.DataをIDataObject型に変換してdataObj に代入します。
    (5) FileName = dataObj.GetData(DataFormats.FileDrop)はドロップファイルのデータをFileNameのString型配列に代入します。
    (6)TextBox1.Text = "Drop " & FileName(0)でDropとファイル名を表示します。
    (7)Textblock1_DragEnterとTextblock1_DragLeaveも同様です。

    感想:






28章:チュートリアル27:マウス イベントの制御(VB)に行く。

トップページに戻る。