【问题标题】:Allow only a text file in drag drop on a textbox using C#.Net仅允许使用 C#.Net 在文本框中拖放文本文件
【发布时间】:2012-10-21 22:13:06
【问题描述】:

我正在开发一个 Windows 窗体应用程序。

在对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
    }
}

此代码只是我之前的文件夹删除操作的一个示例,但现在我想将其限制为仅一个文件,而且它也必须是一个文本文件。因此,当放置动作发生时,它应该首先检查它是否是一个文本文件,然后再做其他事情。

我该怎么做?

【问题讨论】:

  • “文本文件”是什么意思?带有“.txt”后缀?也许还有 csv 或 rft?
  • @Amiram Korach:嗨,我的意思是 *.txt 文件而已。谢谢
  • 或 .log、.config、.xml - 都是文本文件。
  • 对不起,我的意思只是一个'*.txt'文件,根本没有其他格式。

标签: c# winforms drag-and-drop


【解决方案1】:

写在我的头上(未经测试):

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

在将这种东西投入生产之前,我可能会添加更多的空检查(例如,如果文件没有扩展名怎么办?)但这应该会给你基本的想法。

如果您想要某种更严格的测试来查看被删除的文件是否是文本文件,而不是仅仅检查它的扩展名,我建议您阅读this SO question

【讨论】:

  • 哇,效果很好。非常感谢,几分钟前我尝试了类似的方法,但没有奏效。我试图从中只获取一个文件。创建一个数组并稍后检查它是明智的。完美:)
  • 真的很感谢,对理解它很有帮助。我会通过你的建议。一旦完成,我将发布我的最终代码,并对它应用所有检查,以便以后有人可以使用它。再次感谢。
  • @Chetan 尽管我说过空检查,Path.GetExtension() 在您的情况下不应该返回 null - 如果没有扩展名,它会返回 string.Empty,但如果文件不知何故只会返回 null path 为空(这里不应该发生)。它的文档是here
  • 我会在我的代码中注意这一点。即使在一般情况下,这在学习编程时也非常重要。再次感谢您提供如此好的解释并指出可能性:-)
猜你喜欢
  • 2016-10-14
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多