クロスプロセスをドラッグ&ドロップのカスタムオブジェクトタイプをサポートC#
-
21-09-2019 - |
質問
この質問 は何に興味がある私にとっても必ずしもそうではありません。
しています当期純などをサポートで書かれたアプリケーショC#.してい ListView
コントロールの表示配列のC#オブジェクト。私はハマってできるようにドラッグ/ドロップにこれらのlistviewアイテムを例文、ネイティブな形に同じアプリケーションで正しくパスのオブジェクトの配列(タイプ Session
を落としハンドラを取るその他の形式です。
しかし、現をサポートしていきたいクロスロドラッグ/ドロップで複数のインスタンスの願います。この が表示され この作業例 GetDataPresent
が成功するが、最終的には例外をスローします実際に試しを取得するデータはキャスト object[]
へ Session[]
.
if (e.Data.GetDataPresent("Fiddler.Session[]"))
{
Session[] oDroppedSessions;
try
{
oDroppedSessions = (Session[])e.Data.GetData("Fiddler.Session[]");
}
catch (Exception eX)
{ // reaches here
}
}
誰も知らん 必要 の実施 ISerializable
私の物にするためにこの仕事?通常、思うので、その実施 ISerializable
このクラスで非自明なっており、私は心配がありうることになったのでしょう。
更新:の実施 ISerializable
はならないの方法は呼び出されます。同様に、追加の Serializable
属性のクラスには影響なし。その他の考えになりますか。
解決
あなたは、プロセスの境界を横断している、オブジェクト参照は、別のプロセスでは有効ではありません。壁全体にそれらを得るために、オブジェクトをシリアル化するのDataObjectクラス支持体は、それがにBinaryFormatterを使用しています。だから、そう、あなたのクラスに[直列化]属性を適用し、必ずあなたのオブジェクトを解除することができます/シリアル化を適切に作成する必要があります。
他のヒント
[OK]を、これは、ショットである代わりに、セッション全体の配列を使用するのでは、このように個別にそれをやってみてください...
Session[] oDroppedSessions; try { if (e.Data.GetData("Fiddler.Session[]") != null){ object[] objs = e.Data.GetData("Fiddler.Session[]"); if (objs != null && objs.Length > 1){ oDroppedSessions = new Session[objs.Length]; int nIndex = 0; foreach(object obj in objs){ if (obj is Session){ oDroppedSessions[nIndex] = (Session)obj; nIndex++; } } } } } catch (Exception eX) { // reaches here }
フォートワース私は完全にセッションの一部を理解していないよう足で自分自身を撮影以外の撮影、それを試してみてください...
希望このことができます、 宜しくお願いします、 トムます。
あなたは(キャストが失敗した場合に例外がスローされることなく、「ヌル」を返します「と」)例外を回避します鋳造用「と」使用することができます - 私はこれは(それだけで意志あなたの問題を解決するとは思いません私はそれはおそらく、あなたのクラスの直列化を行う必要がありますです同意するとして、)実際の例外を避けます。ただ今のためにそれをテストするために、
- あなたはそれを動作させるために困難になるフィールドをコメントアウトして、仮説を検証することができます。