フォームAからフォームBへデータをドラッグ&ドロップしたい

[戻る]
KEN 2007/03/30(金) 17:13:06
皆様、再びお世話になります。

VC++ .NET2005 CLIで画面系アプリケーションを開発しています。

現在

フォームAとフォームAから呼び出されたフォームBがあるのですがフォームBのデー
タをドラッグ&ドロップでフォームAに持っていきたいのです。

ネット等を駆使して調べておりますがネット環境が32Kのダイアルアップなので環境的に
かなり悲惨な状況です。

やり方等、教えていただけたら助かります。

KEN 2007/03/30(金) 17:14:25
すみません。。タイトルに修正です。。

「フォームBからフォームAへデータをドラッグ&ドロップしたい」です。

Blue 2007/03/30(金) 17:38:45
データとは具体的に何なのでしょうか?
また、フォームAとフォームBの関係はどうなっているのでしょうか?
フォームAからShowで表示している?

KEN 2007/03/30(金) 18:07:10
Blueさん

お世話になります。

データとはフォームA内で持っている変数に格納されている値です。
フォームAとフォームBの関係はフォームAからフォームBをShowしているのでフォー
ムAが親でフォームBが子の関係になります。

Blue 2007/03/30(金) 18:15:09
よくわからないのですけど。

普通ドラッグ&ドロップってのは、たとえば
FormAのテキストボックスの値をFormBのテキストボックスにとか
そういうものなのですが、

FormB全体をFormAにドロップするのでしょうか?

KEN 2007/03/30(金) 18:24:41
Blueさんへ

わかりづらくてすみません(><)

ドラッグ&ドロップ時にフォームBにある値をフォームAに渡したいだけです。

例えば

フォームB内にリスト表示されている一覧があってそこで選択したもの(中身はa="あい
うえお"、b="かきくけこ")をドラッグ&ドロップでフォームAに渡してあげたいので
す。

フォームAで変数a内の"あいうえお"とb内のかきくけこが受け取れればOKです。

Blue 2007/03/30(金) 19:29:40
以下 フォームA→Form1,フォームB→Form2とする。

Form2のListBox1の選択したアイテムを
どこにドロップするのか微妙なのでForm1全体とすると

Form1の AllowDropプロパティをTrueにして

●Form1.h
private:
Void button1_Click(Object^ sender, EventArgs^ e)
{
    Form2^ f = gcnew Form2();
    f->Show();
}
Void Form1_DragEnter(Object^ sender, Windows::Forms::DragEventArgs^ e)
{
    if (e->Data->GetDataPresent(ListBox::SelectedObjectCollection::typeid))
        e->Effect = DragDropEffects::Copy;
    else
        e->Effect = DragDropEffects::None;
}
Void Form1_DragDrop(Object^ sender, Windows::Forms::DragEventArgs^ e)
{
    Type^ t = ListBox::SelectedObjectCollection::typeid;
    if (e->Data->GetDataPresent(t))
    {
        ListBox::SelectedObjectCollection^ item = 
            static_cast<ListBox::SelectedObjectCollection^>(e->Data->GetData(t));
        
        // 表示して確認
        String^ s;
        for (int i = 0; i < item->Count; ++i)
            s += item[i]->ToString() + L"\n";
        MessageBox::Show(s);
    }
}

てな感じにして、

●Form2.h
private:
Void listBox1_MouseMove(Object^  sender, Windows::Forms::MouseEventArgs^  e) {
    if (e->Button == Windows::Forms::MouseButtons::Left)
    {
        ListBox::SelectedObjectCollection^ items =
            this->listBox1->SelectedItems; 
        if (items->Count > 0)
            DragDropEffects dds = 
                this->listBox1->DoDragDrop(items, DragDropEffects::All);
    }
}

とします。
※ソースコードは掲示板の表示の関係で整形してあります。

参考:
http://dobon.net/vb/dotnet/control/draganddrop.html



それと、C++/CLIの場合サンプルが非常に少ないので、
C#,VB.NETとあわせて探したほうが良いでしょう。

KEN 2007/04/05(木) 12:25:55
[[解決]]
Blueさん

お返事が遅くなりすみません。

Blueさんのサンプルソースを少し改良して意図した操作が出来るようになりました。お
忙しい中ありがとうございました。C++/CLIのサンプルが非常に少ないのでいろいろと勉
強してがんばってみます。

古いスレッドには追加発言できません。