基本上,我是通过将标签拖动到文本框来使用文本框和标签进行拖放的。文本框和标签在相同的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());

            }

我还可以动态创建标签(label是拖动目标),如下所示:
  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);
        }

我这里有两个问题。

1号。我正在使用tbox.drop事件显示MessageBox.Show(something);当拖动目标被放下但无法使用时显示一个消息框。

这是我的代码:
       private void tbox_Drop(object sender, DragEventArgs e)
    {
        MessageBox.Show("Are you sure?");
    }

其次,当拖放目标时,我也想清除tbox.Text,因为我以前可能将其他拖动目标拖放到了tbox中。所以我想清除tbox.Text并在每次将目标拖动到textbox时放下拖动目标。

我怎么做?我被困在应该用于此事件的事件上,如何从那些事件处理程序访问tbox?

最佳答案

它为我工作。

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

如果仅将它们用于拖动目的,则不需要MouseMoveDragEnterLabel事件。

如下所示,将Drop事件替换为PreviewDropTextBox:
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;
}

关于c# - WPF C#拖放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17872707/

10-11 12:24