これは、ボーランドのTurbo C++環境で行われていますが、私が取り組んでいるC#アプリケーションでは、どうやってそれをどうやって進めるのか分かりません。注目すべきベストプラクティスや落とし穴はありますか?ファイルをアプリケーションにドラッグアンドドロップするにはどうすればよいですか?
答えて
Windowsフォームでは、コントロールのAllowDropプロパティを設定し、DragEnterイベントとDragDropイベントを待ち受けます。
DragEnter
イベントが発生すると、引数のAllowedEffect
をnone以外の値(例:e.Effect = DragDropEffects.Move
)に設定します。
DragDrop
イベントが発生すると、文字列のリストが表示されます。各文字列は、ドロップされるファイルへのフルパスです。
あなたは怪我に気づく必要があります。ドラッグ/ドロップ操作でDataObjectとして渡すクラスは、すべて直列化可能でなければなりません。したがって、オブジェクトを試行して渡しても機能していない場合は、それがほぼ確実に問題になるため、シリアル化できることを確認してください。これは数回私を捕まえました!
もう1つのよくある問題は、フォームのDragOver(またはDragEnter)イベントを無視できると考えていることです。私は通常、フォームのDragOverイベントを使用してAllowedEffectを設定し、特定のコントロールのDragDropイベントを使用してドロップされたデータを処理します。
いくつかのサンプルコード:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.AllowDrop = true;
this.DragEnter += new DragEventHandler(Form1_DragEnter);
this.DragDrop += new DragEventHandler(Form1_DragDrop);
}
void Form1_DragEnter(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
}
void Form1_DragDrop(object sender, DragEventArgs e) {
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) Console.WriteLine(file);
}
}
さらに別の落とし穴:ドラッグイベントはすべての例外を飲み込む呼び出す
フレームワークコード。あなたのイベントコードはスムーズに動いていると思うかもしれませんが、どこにでも流出しています。フレームワークがそれらを盗むので、それらを見ることはできません。
私はこれらのイベントハンドラに常にtry/catchを入れているので、例外をスローするかどうかは分かります。私は通常、Debugger.Break();キャッチ部分に。
リリース前、テスト後、すべてが動作しているように見える場合は、これらを削除または実際の例外処理と置き換えます。
Windows Vista/Windows 7のセキュリティ権に注意してください - 管理者としてVisual Studioを実行している場合、Visual Studio内から実行すると、管理者以外のエクスプローラウィンドウからプログラムにファイルをドラッグできなくなります。ドラッグに関連するイベントは起動しません!私はこれが他の誰かの人生の時間を無駄にしないように助けてくれることを願っています...
@Wayne Uroda:私のコードはうまくいかないと思っていました。このhttp://en.wikipedia.org/wiki/File:ProhibitionSign2.svgのような大きな "No symbol"を与えてくれました。それから私はこの答えを見て、非管理者としてVSを実行し、それが動作する前に!感謝万円。 –
これについて十分にあなたに感謝することはできません、私はこのポストを見つけた場合を除き、私はあきらめてしまいました!それはあなたがそれを書いたときと同じように、2017年のWindows 10で有効です。 – Culme
ここで私はファイルやフォルダを完全にドロップしていました。私の場合は、*.dwg
ファイルのみをフィルタリングし、すべてのサブフォルダを含めることを選択しました。
fileList
は
var fileList = (IList)FileList.ItemsSource;
は、そのトリックの詳細については
https://stackoverflow.com/a/19954958/492を見る
IEnumerable
または私の場合は同様のWPFコントロールにバインドされました。
ドロップハンドラ...
private void FileList_OnDrop(object sender, DragEventArgs e)
{
var dropped = ((string[])e.Data.GetData(DataFormats.FileDrop));
var files = dropped.ToList();
if (!files.Any())
return;
foreach (string drop in dropped)
if (Directory.Exists(drop))
files.AddRange(Directory.GetFiles(drop, "*.dwg", SearchOption.AllDirectories));
foreach (string file in files)
{
if (!fileList.Contains(file) && file.ToLower().EndsWith(".dwg"))
fileList.Add(file);
}
}
- 1. ドラッグアンドドロップをキャンバスに実装するにはどうすればよいですか?
- 2. JTableで行をドラッグアンドドロップするにはどうすればよいですか?
- 3. jQuery:コードのドラッグアンドドロップをシミュレートするにはどうすればよいですか?
- 4. 複数のアクティビティでドラッグアンドドロップするにはどうすればよいですか?
- 5. UWPアプリケーションのListView間でカスタムオブジェクトをドラッグアンドドロップするにはどうすればよいですか?
- 6. MacOSアプリケーションにムービーファイル(.mov)をドラッグアンドドロップするにはどうすればいいですか?
- 7. アプリケーションでファイルを開くにはどうすればよいですか?
- 8. WPFアプリケーションで不可能なドラッグアンドドロップを検出するにはどうすればいいですか?
- 9. ドラッグアンドドロップ中に表示されるビューをカスタマイズするにはどうすればよいですか?
- 10. ファイルにファイルをリンクするにはどうすればよいですか?
- 11. エクスプローラからWPFコントロールに画像をドラッグアンドドロップするにはどうすればよいですか?
- 12. アプリケーションにグラフを描画するにはどうすればよいですか?
- 13. Dotcloudにblohgアプリケーションをデプロイするにはどうすればよいですか?
- 14. アプリケーションをページに追加するにはどうすればよいですか?
- 15. アプリケーションにブラックベリーマップを表示するにはどうすればよいですか?
- 16. アプリケーションにMONOランタイムをパックするにはどうすればよいですか?
- 17. アプリケーションにタッチイベントを実装するにはどうすればよいですか?
- 18. アプリケーションにIntellisenseを追加するにはどうすればよいですか?
- 19. フォーラムをアプリケーションに統合するにはどうすればよいですか?
- 20. インテントでアプリケーションを起動するにはどうすればよいですか?
- 21. アプリケーションでflurryを使用するにはどうすればよいですか?
- 22. Silverlightアプリケーションでキーストロークをキャプチャするにはどうすればよいですか?
- 23. iOSアプリケーションでファブリックキットをアンインストールするにはどうすればよいですか?
- 24. アセンブリでCアプリケーションをロードするにはどうすればよいですか?
- 25. iphoneアプリケーションでメモリリークをテストするにはどうすればよいですか?
- 26. EclipseでLiftアプリケーションをデバッグするにはどうすればよいですか?
- 27. iOSアプリケーションをプログラムでインストールするにはどうすればよいですか?
- 28. アプリケーションをプログラムで更新するにはどうすればよいですか?
- 29. Androidでアプリケーションを実行するにはどうすればよいですか?
- 30. アプリケーションでオンラインユーザーをカウントするにはどうすればよいですか?
あなたがC#アプリケーションまたはC#IDEにドラッグ&ドロップを意味しますか? – JamesSugrue
ソースのC#アプリケーション。彼は自分のアプリケーションをドラッグ&ドロップにしたいと思っています。 – SLA80
[リンク](http://helgeklein.com/blog/2010/03/how-to-enable-drag-and-drop-for-an-elevated-mfc-application-on-vistawindows-7 /)。 –