5

基本的に、ラベルをテキストボックスにドラッグして、テキストボックスとラベルを使用してドラッグアンドドロップを行っています。テキストボックスとラベルは同じ for ループで作成されます。

次のようにテキストボックスを動的に作成しました(テキストボックスはドロップターゲットです):

  TextBox tbox = new TextBox();
            tbox.Width = 250;
            tbox.Height = 50;
            tbox.AllowDrop = true;
            tbox.FontSize = 24;
            tbox.BorderThickness = new Thickness(2);
            tbox.BorderBrush = Brushes.BlanchedAlmond;     
            tbox.Drop += new DragEventHandler(tbox_Drop);

            if (lstQuestion[i].Answer.Trim().Length > 0)
            {

                wrapPanel2.Children.Add(tbox);
                answers.Add(lbl.Content.ToString());
                MatchWords.Add(question.Content.ToString(), lbl.Content.ToString()); 

            }

また、次のようにラベルを動的に作成しました(ラベルはドラッグターゲットです):

  Dictionary<string, string> shuffled = Shuffle(MatchWords);
        foreach (KeyValuePair<string, string> s in shuffled)
        {
            Label lbl = new Label();
            lbl.Content = s.Value;
            lbl.Width = 100;
            lbl.Height = 50;
            lbl.FontSize = 24;              
            lbl.DragEnter += new DragEventHandler(lbl_DragEnter);
            lbl.MouseMove += new MouseEventHandler(lbl_MouseMove);
            lbl.MouseDown +=new MouseButtonEventHandler(lbl_MouseDown);
     //       lbl.MouseUp +=new MouseButtonEventHandler(lbl_MouseUp);
           dockPanel1.Children.Add(lbl);
        }

ここに 2 つの問題があります。

1st. MessageBox.Show( something ) を表示するために tbox.drop イベントを使用しています。ドラッグ ターゲットがドロップされているときにメッセージ ボックスを表示しますが、機能しません。

ここに私のコードがあります:

       private void tbox_Drop(object sender, DragEventArgs e)
    {
        MessageBox.Show("Are you sure?");
    }

次に、ドラッグ ターゲットがドロップされたときに tbox.Text をクリアしたいと考えています。これは、以前に他のドラッグ ターゲットを tbox にドロップした可能性があるためです。だから私は tbox.Text をクリアし、ターゲットを textbox にドラッグするたびにドラッグターゲットをドロップしたいと思います。

それ、どうやったら出来るの?私はこれに使用する必要があるイベントで立ち往生しています。これらのイベントハンドラーから tbox にアクセスするにはどうすればよいですか?

4

2 に答える 2

4

それは私のために働いた。

private void lbl_MouseDown(object sender, MouseButtonEventArgs e)
{
    Label _lbl = sender as Label;
    DragDrop.DoDragDrop(_lbl, _lbl.Content, DragDropEffects.Move);
}

ドラッグ目的でのみ使用する場合は、イベントは必要MouseMoveありません。DragEnterLabel

以下に示すように、DropイベントをPreviewDropfor に置き換えます。TextBox

tbox.Drop += new DragEventHandler(tbox_Drop);

これとともに

tbox.PreviewDrop += new DragEventHandler(tbox_PreviewDrop);

private void tbox_PreviewDrop(object sender, DragEventArgs e)
{
    (sender as TextBox).Text = string.Empty;
}
于 2013-07-26T04:22:46.610 に答える
0

ドラッグしたい TextBox (mousedown イベントを追加)

private void dragMe_MouseDown(object sender, MouseButtonEventArgs e)
        {
            TextBox tb = sender as TextBox;
            // here we have pass the textbox object so that we can use its all property on necessary
            DragDrop.DoDragDrop(tb, tb, DragDropEffects.Move);
        }

ドロップする TextBox (ドロップ イベントを追加し、allowdrop チェックボックスとしてマークを付ける必要があります)

 private void dropOnMe_Drop(object sender, DragEventArgs e)
 {

            TextBox tb= e.Data.GetData(typeof(TextBox)) as TextBox;
            // we have shown the content of the drop textbox(you can have any property on necessity)
            dropOnMe.Content = tb.Content;
 }
于 2015-09-02T11:31:30.920 に答える