「ハイテク」電話帳プログラムを作成しています。成功すると、番号や人、場所を別のプロファイルページにドラッグアンドドロップしてリンクできます一緒に。ドラッグドロップのVisual C++の問題
要素(数字や人物など)は、System :: Windows :: Forms :: UserControlから派生したクラスで表されます(基本的に、ラベルを持つパネルと、メンバー変数に格納されている表現された要素に関するデータです) 。このパネルはウィンドウにドラッグされ、別のウィンドウのコンストラクタに渡され、要素間のリンクが作成されます。この要素をクリックすると、プロファイルページがウィンドウに表示されます。
ドラッグアンドドロップを提供する要素、のコード:
/* PhonebookElement.h */
private:
System::Void PhonebookElement_Click(System::Object^ sender,
System::EventArgs^ e) {
doClick();
}
System::Void nameLabel_MouseDown(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e) {
DragDropEffects dde = DoDragDrop(this, DragDropEffects::Copy);
if(dde == DragDropEffects::None)
doClick();
}
ドラッグアンドドロップを受け付けるプロフィールページウィンドウのコード:
/* PhonebookInfoWindow.h */
private:
System::Void PhonebookInfoWindow_DragOver(System::Object^ sender,
System::Windows::Forms::DragEventArgs^ e) {
e->Effect = DragDropEffects::Copy;
}
System::Void PhonebookInfoWindow_DragDrop_1(System::Object^ sender,
System::Windows::Forms::DragEventArgs^ e) {
MakeRelationWindow^ mrw = gcnew MakeRelationWindow(this->m_hparent,
(PhonebookElement^)e->Data->GetData(
System::Windows::Forms::DataFormats::Serializable),this);
mrw->Show();
}
のコンストラクタ関連メーカーのウィンドウ:
/* MakeRelationWindow.h */
MakeRelationWindow(PhonebookElement^ first, PhonebookElement^ second, Object^ parent)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
this->typeBox->MaxLength = LSTRINGLENGTH;
this->first = first;
this->second = second;
this->parent = parent;
this->descriptionBox->Text = "Linking together\r\n" +
this->first->maindata + "\r\nand\r\n" + this->second->maindata;
}
私は2つの問題があります。
1.私はPhoneBookElementのMouseDownアクションを実装しているので、クリックを認識しません。 (私はMouseClickアクションを試しましたが、どちらもうまくいきませんでした)if(dde == DragDropEffects::None){doClick();}
の部分を回避策としてMouseDownアクションに入れましたが、ユーザーがコントロールをどこかにドラッグすると、それもクリックとして扱われます。
2.すべてがうまくいきません:D
私は何が間違っているのか分かりません(GetData()
関数を使用している可能性がありますが、DataFormatsについてよく知らないですが) MakeRelationsWindowは2番目のパラメータとして「未定義の値」を取得します。
これら2つの問題を修正するにはどうすればよいですか?
P.S.私はこのチュートリアルに従っていた:http://www.codeproject.com/KB/dotnet/csdragndrop01.aspx
これはC#とドラッグドロップ文字列ですが、それでも私が見つけることができる最高のものです。
また、MouseDownでマウスキャプチャを有効にし、カーソルがコントロールの境界外にある場合は、MouseMoveからDoDragDropを呼び出します。 –
お返事ありがとうございます。私は、 'MakeRelationWindow(this-> m_hparent、(PhonebookElement))e-> Data-> GetData(System :: Windows :: Forms :: DataFormats :: Serializable)を変更することで2番目の問題を解決しました。 '' MakeRelationWindow(this-> m_hparent、(PhonebookElement ^)e-> Data-> GetData(this-> m_hparent-> GetType() - > ToString())」)、これはDragOverでもうまく動作します;最初のものについては、私はあなたのソリューションを試しています、もう一度ありがとう。編集: 'this-> m_hparent'はもちろんPhonebookElement ^オブジェクトなので、ここで必要な型情報を得るために使うことができます –
これはトリッキーでした。ありがとう –