自分でイベントを作った経験はほとんどありません。私は現在、フォームとコントロールを使用してイベントを処理しているため、イベントを処理する WinForm の方法に固執しようとしています。
WinForm コントロールには、独自のイベントが既にあります。イベントは特定のデリゲート タイプで作成されるため、イベント中に発生する処理に使用するメソッドのデリゲート シグネチャを一致させる必要があります。私が知る限り、これは、イベント ハンドラーで sourceObject
とEventArgs
.
DragDrop
関連するイベントを介してコントロール間でさまざまな情報を渡す方法を理解しようとしています。さまざまな状況でさまざまなコード スニペットをオンラインで見つけることができましたが、情報が実際にどのように渡されるかをよりよく理解したいと思います。
特にイベントに関してDragDrop
は、私の情報はDataObject
. これは、パラメーターとしてDragDrop.DoDragDrop
メソッドに渡されます。
ここから私の理解力が低下し始めます。私が見たほとんどの例では、何らかのデータ形式が指定されているようです。データ形式自体は文字列型です。通常、データ形式はデータとともにDataObject
.
このデータ形式は何をしていますか? 関連するデータのタイプを示しているだけですか?データ形式がテストされ、データ形式に応じてさまざまなアクションが実行された例を見てきました。タイプを確認するために typeof(YourData) を実行できませんでしたか? データ形式がどのように役立つかわかりません。
http://msdn.microsoft.com/en-us/library/ms741842.aspx
上記のリンクの最初の例は、DataObject
データ形式が指定されていない状態で作成されていることを示しています。データ形式が自動的に選択され、オブジェクトがデフォルトで変換されることが説明されています。
に任意のオブジェクトを渡すことはできますDataObject
か? 次に、DragDrop
イベントがターゲット コントロールで発生したときに、そのコントロールは渡されたオブジェクトのメソッドとフィールドにアクセスできますか? または、オブジェクトは によって他の形式に変換されDataObject
ますか? いろいろな構造はどうですか?
また、Windows エクスプローラーのアイコンからフォームへのドラッグ アンド ドロップもいくつか行いました。私が見つけたいくつかのサンプルコードを使用して、アイコンのファイルパスを取得できました。また、データ形式を使用しました。
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
概要:
WinForm イベントを介してデータがどのように渡されるかを理解しようとしています。DragDrop
さまざまな例で見たもののいくつかを理解できません。データはどういうわけかさまざまな形式で保存されており、そのデータを抽出する方法があることを理解しています。データ形式が何に使用されるのかわかりません。を介して転送できるデータの種類が正確にはわかりませんDataObject
。一般的な私の理解EventArgs
はかなり不足しています。
私がここで言及したことについて自由にコメントしてください。私が何か間違ったことを述べた場合は、それを指摘してください。この主題をよりよく理解するのに役立つものは何でも感謝します.
編集: これでどこに行く予定かを説明することにしました。誰かが私がやろうとしていることを、私が尋ねたことのいくつかを説明する方法として使用できるかもしれません.
特定の種類のコントロールを含むフォームがあります。コントロールの配置を高度にカスタマイズ可能かつ動的にしようとしています。ユーザーが別のコントロールをフォームに追加するたびに、すべてのコントロールが自動的に再配置され、整理整頓されます。
現在、ユーザーがフォームの周りにコントロールをドラッグして位置を変更できるようにしようとしています。ユーザーがコントロールをドロップすることを決定した場合はいつでも、移動コントロール用のスペースを確保するために、他のすべてのコントロールが邪魔にならないように移動します。
ドラッグされたコントロールとフォーム上の他のすべてのコントロールを適切に移動できるようにするには、ドラッグされたコントロールから特定の情報を取得できる必要があります。イベントを介して渡す必要がある主なデータは、System.Drawing.Point
構造体を使用する Location プロパティの形式を取ります。