差分
編集の要約なし
[[MonoMacXamarin.Mac]]において、NSView(およびその派生クラス)でFinderからのファイルのドラッグ&ドロップを受け付けれる方法を模索中。
==実装1==
Finderからのファイルのドラッグ&ドロップを受け付け入れるにはNSView(またはその派生クラス)を継承し、処理を追加してやる必要がある。
=== 受付登録 ===
まず、RegisterForDraggedTypesメソッドでドロップを許可する種類を指定して受付を開始する。
これでドラッグを受け付けるようになる。
NSPasteboardには様々なタイプが用意されている。
<source lang="csharp">
{
#region Constructors // Called when created from unmanaged code public DropFileTargetViewSampleView(IntPtr handle) : base(handle)
{
Initialize();
}
// Called when created directly from a XIB file [Export("initWithCoder:")] public DropFileTargetViewSampleView(IntPtr handleNSCoder coder) : base(handlecoder)
{
Initialize();
}
void Initialize()
{
// ※※※ これ重要 ※※※
//
// ドラッグ・アンド・ドロップの受付を開始する // NSPasteboardには他にもいろいろなタイプがあるよ! this.RegisterForDraggedTypes(new string[]{"NSFilenamesPboardType" NSPasteboard.NSFilenamesType }); }
public override NSDragOperation DraggingEntered(NSDraggingInfo sender)
{
}
public override bool PerformDragOperation(NSDraggingInfo sender)
{
}
}
}
</source>
===注意点=関連項目 ==この例に限った話ではないが、NSView(またはそのサブクラス)を継承した独自クラスを扱う際には以下の掟に従う必要がある。これによりXcode側(Interface Builder)上で独自クラスを認識するようになる。*NSViewから派生する際にはクラスにRegister属性を付けること。*IntPtr handleを引数とするコントラクタを用意すること。 ===その他===[[MonoMacInterface Builder/基本的な使い方]]では[[LINQ]]が使えるおかげで* [[Objective-CXamarin.Mac/マウスの中ボタン(ホイール)のクリックを取得する]]で記述するより圧倒的に簡潔明瞭に記述できる。 ==関連項目==*[[MonoMacXamarin.Mac/ウインドウ座標をビュー座標に変換する]]
==参考文献==
{{reflist}}
{{stub}}
[[category:MonoMac]][[category: Xamarin.Mac]]