VC#でドラッグアンドドロップ時のカーソルの制御
プログラミング初心者です。
ファイル管理ソフトを作りたいなと、種々の言語を比較した結果VC#が一番やりやすいかなと思い、基礎知識もなくvisual studioをインストールしてあれこれ試行錯誤しながら、メニューやボタンやリストビューを作るところまでは行きました。ドラッグアンドドロップ機能を付けたいと思い、色々と検索してドラッグアンドドロップでlistView1に特定の拡張子のファイルを入れる下記のコードは見つかりました。さらに、特定の拡張子(ここでは.txt)以外のファイルをドラッグしてlistView1の領域に入った時、カーソルを禁止のマークに変えたいのですがそのコードがわかりません。ご教授いただければと存じます。
// もちろん基礎知識も平行して勉強しているところです。
// 下記のlistView1_DragEnterイベントハンドラ内に
// if(ドラッグしたファイルの拡張子が.txt以外だったら){Cursor.Current = Cursors.No;}
// とすると思い色々試したのですがうまくいきませんでした。(素人の試行錯誤なので提示できません)
private void listView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Link;
}
}
private void listView1_DragDrop(object sender, DragEventArgs e)
{
string[] handles = (string[])e.Data.GetData(DataFormats.FileDrop, false);
foreach (string s in handles)
{
if (File.Exists(s))
{
if (string.Compare(Path.GetExtension(s), ".txt", true) == 0)
{
AddFileToListview(s);
}
}
else if (Directory.Exists(s))
{
DirectoryInfo di = new DirectoryInfo(s);
FileInfo[] files = di.GetFiles("*.txt");
foreach (FileInfo file in files)
AddFileToListview(file.FullName);
}
}
}
private void AddFileToListview(string fullFilePath)
{
if (!File.Exists(fullFilePath))
return;
string fileName = Path.GetFileNameWithoutExtension(fullFilePath);
string dirName = Path.GetDirectoryName(fullFilePath);
if (dirName.EndsWith(Convert.ToString(Path.DirectorySeparatorChar)))
dirName = dirName.Substring(0, dirName.Length - 1); //hack off the trailing \
ListViewItem itm = listView1.Items.Add(fileName);
itm.SubItems.Add(dirName); //second column = path
}
お礼
ありがとうございました。解決しました。