把記事本拖放至 TextBox 內並顯示資料。
using System.IO; // 必須引用此命名空間
namespace WindowsFormsApplication1
{
public partial class DragDropText : Form
{
public DragDropText()
{
InitializeComponent();
}
private void DragDropText_Load(object sender, EventArgs e)
{
// 允許 textbox 可以拖放
txtContent.AllowDrop = true;
}
private void txtContent_DragEnter(object sender, DragEventArgs e)
{
// 判斷
// 1. 是否有拖曳物件
// 2. 該物件是否無 txt 檔案
// 3. 是不是 DataFormats.FileDrop
bool fileformatCheck = e.Data.GetDataPresent(DataFormats.FileDrop);
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if
(
fileformatCheck == false ||
files == null || files.Length == 0 ||
Path.GetExtension(files[0]).ToUpperInvariant() != ".TXT"
)
{
// 當 e.Effect = DragDropEffects.None 時,DragDrop 事件不會被觸發
e.Effect = DragDropEffects.None;
}
else
{
// 當 e.Effect = DragDropEffects.Copy (非DragDropEffects.None)時,DrapDrop 事件會被觸發,且 TextBox 上的拖曳符號會變成 +
e.Effect = DragDropEffects.Copy;
}
}
private void txtContent_DragDrop(object sender, DragEventArgs e)
{
// 已經在 DrapEnter 內進行防呆,DrapDrop 內就直接抓取資料
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
string filepath = files[0];
FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
// Encoding.Default 可以避免內容產生亂碼
StreamReader sr = new StreamReader(fs, Encoding.Default);
txtContent.Text = sr.ReadToEnd();
}
}
}
文字檔案(預設編碼為 ANSI)編碼格式與 Stream 必須一致才能正確顯示文字,因此產生 StreamReader 時,指定 Encoding.Default 來避免亂碼產生。
沒有留言:
張貼留言