6

私は Windows フォーム アプリケーションに取り組んでいます。

コントロールでの 1 回のドラッグ アンド ドロップ操作中にTextBox、ユーザーがテキスト ファイルのみを提供するように制限したいと考えています。

// drag drop module for input text file in textbox starts here
private void textBoxInputTextFile_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.Copy;
    else
        e.Effect = DragDropEffects.None;
}

private void textBoxInputTextFile_DragDrop(object sender, DragEventArgs e)
{
    if(e.Data.GetData(DataFormats.FileDrop, true))
    {
    // Check if it is a text file
    // Okay if it is a text file or else give an error message
    }
}

このコードは、以前のフォルダー ドロップ アクションの単なるサンプルですが、ここでは 1 つのファイルのみに制限したいと考えており、それもテキスト ファイルである必要があります。そのため、ドロップ アクションが発生したときに、まずそれがテキスト ファイルかどうかを確認してから、他の処理を行う必要があります。

それ、どうやったら出来るの?

4

1 に答える 1

8

私の頭の上から書かれた(テストされていない):

var files = (string[])e.Data.GetData(DataFormats.FileDrop);

foreach(var file in files)
{
    if(System.IO.Path.GetExtension(file).Equals(".txt", StringComparison.InvariantCultureIgnoreCase))
    {
        //file has correct extension, do something with file
    }
    else
    {
        MessageBox.Show("Not a text file");
    }
}

この種のものを本番環境に導入する前に、おそらくさらに null チェックを追加します (たとえば、ファイルに拡張子がない場合はどうなるでしょうか?) が、これで基本的な考え方が得られるはずです。

ドロップされたファイルが拡張子を確認するだけでなく、テキスト ファイルであるかどうかを確認するためのより厳密なテストが必要な場合は、この SO questionを読むことをお勧めします。

于 2012-11-01T10:40:02.053 に答える