2011-12-13 8 views
0

ドラッグされたアイテムのソースは何ですか? I.私たちはchrome/firefox/etcの画像をwinformsアプリケーションにドラッグしました。落ち込んだ時点で、そのアイテム(chrome、ffなど)のソース(ウィンドウのハンドルかもしれません)を知りたいと思います。ドラッグされたアイテムのソース

+0

D + D契約の一部を見つけることができません。 –

答えて

1

慣例ではありません。ドラッグ・ドロップ操作が無意味であればあるほど、そのデザインが優れています。

カスタムフォーマットを使用してドラッグドロップ操作に余分なメタデータ(文字列など)を追加することによって、ソースを識別することができます。あなたは、様々なドラッグの「スヌーピング」試すことができますIDataObject.GetFormats方法使用して削除します。この例では、私は文字列にすべてのデータをキャスト強制だと

private void Test_DragDrop(object sender, DragEventArgs e) 
    { 
     string[] formats = e.Data.GetFormats(); 

     foreach (string s in formats) 
     { 
      try 
      { 
       string d = (string)e.Data.GetData(s); 
       MessageBox.Show(s + "\n" + d); 
      } 
      catch { } 
     } 
    } 

注意を。通常、文字列以外の値が添付されている可能性があるため、いくつかの例外がスローされます。たとえばGoogle Chromeでは、文字列をコピーすると8種類のデータ形式が提供され、そのうちの5つのみが文字列でした。

独自のドラッグドロップ操作を開始し、ソースであるかどうかを確認したい場合は、この目的のためにカスタムデータ形式を使用できます。

+0

いいえ、私はドロップレシーバに取り組んでおり、ドラッグ可能なアイテムを拡張することはできません。それで、私のためにアイテムが提供されました。私が知りたいことはすべて - ドラッグ可能なアイテムの親は誰ですか? – user1096500

+0

ドラッグ操作に親またはソースがありません。あなたはソースを特定するためにそれをハックしようと試みることができます。ソースを知る必要はありません。あなたがそれを知る必要がある理由と達成しようとしていることを正確に理解していれば、それを実行するより良い方法があるかもしれません。 –

+0

私はウィンドウのタイトルを知りたいです。だからここに単純化されたタスクがあります:アイテムを落とした後、アプリケーションはどこから来たのか(たとえば、chrome/FF/ieなどから落とした) - ウィンドウのタイトルだけを述べるべきです。 – user1096500

関連する問題