2011-01-17 17 views
0

C#.NETでイベント処理を使用するのが初めてで、実験している簡単なコードの背後にある動作を理解しようとしています。私はもっ​​と複雑な例を使って作業していますが、例を単純化すれば、もっと集中的な答えが得られることを期待しています。単純なドラッグ&ドロップイベント処理の問題

私は、値で初期化されたListBoxとウィンドウ内のパネルを持つメインウィンドウを定義する次のコードを持っています。 ListBox Itemsをドラッグしてパネルにドロップする作業をしています。パネルがDragDropイベントを読み込んでいることを示すために、単に背景色を変更しています。

私の問題は、値をドロップするとバックグラウンドカラーが変わらないため、DragDropが機能しないということです。私はこれが少し誇張されていることを知っていますが、私はなぜそれが機能していないのか理解しようとしています。

ここに私が使用している次のコードがあります。

 public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     //Allow Panel to accept dropped values 
     this.panel1.AllowDrop = true; 

     //Initialize ListBox with sample values 
     listBox1.Items.Add("First Name"); 
     listBox1.Items.Add("Last Name"); 
     listBox1.Items.Add("Phone"); 

     //Setup DragDrop Event Handler - is this correct, or even needed? 
     this.panel1.DragDrop += new DragEventHandler(panel1_DragDrop); 
    } 

    private void listBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     ListBox box = (ListBox)sender; 
     String selectedValue = box.Text; 
     DoDragDrop(selectedValue.ToString(), DragDropEffects.Copy); 
    } 

    private void panel1_DragDrop(object sender, DragEventArgs e) 
    { 
     //Change Background color to signify value has been dropped 
     ((Panel)sender).BackColor = Color.Black; 
    } 

} 

これは単純すぎる例です。私が間違っていることが分かったら、教えてください。
EDIT私が混乱している理由の例を示すために、DragOverイベントが発生したときに、ドラッグされたListBox Itemテキストをテキストボックスに配置するようにこの例を変更していますが、テキストボックスに値をドロップしたときと同じこと、私はそれを動作させることができませんでした。

+0

リストボックスの項目をドラッグアンドドロップするといいですか? – DevDemon

+0

私のアプリケーションではうまくいっていますが、この例では、パネル上にMouseupをしたときにDragDropイベントが動作していることを知りたいだけです。 – TheJediCowboy

答えて

1

パネルのDragEnterイベントを処理し、e.EffectsNone以外に設定します。

+0

SLaks、私はこれを少し誤解しています...もう少し詳しく説明できますか。事前に感謝しています。 – TheJediCowboy

+0

ドキュメントを参照してください。 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop.aspx – SLaks

+0

コントロール(パネル、ラベルなど)の操作DragOver/DragEnterイベントとe.Effetc =の設定。 ... お手伝いありがとう。 – TheJediCowboy