c# - WPF C# 拖放

标签 c# wpf textbox drag-and-drop label

基本上,我是通过将标签拖到文本框来使用文本框和标签进行拖放操作。文本框和标签在同一个 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 个问题。

第一。我正在使用 tbox.drop 事件来显示 MessageBox.Show( something ) ;在拖放目标但不起作用时显示消息框。

这是我的代码:

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

其次,我还想在拖放目标时清除 tbox.Text,因为之前我可能将其他拖放目标拖放到 tbox 中。所以我想每次将目标拖到文本框时都清除 tbox.Text 并放下拖动目标。

我该怎么做?我被困在我应该为此使用哪个事件以及如何从这些事件处理程序访问 tbox ?

最佳答案

它对我有用。

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

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

Drop 事件替换为 TextBoxPreviewDrop 如下所示:

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/

相关文章:

c# - 泛型协变转换或转换为实型

具有多个内容的 WPF 应用程序布局,无需窗口

c# - 当 Visible = False 时,TextBox TextChanged 事件不会触发?

c# - map 初始化后将标记添加到谷歌地图

javascript - 如果使用 jquery,如何检查文本框是否为空并显示弹出消息?

java - 一个 Swing 组件可以在不同的行上显示单独的、可选择的字符串?

c# - Entity Framework 在一次插入多行时忽略重复的主键值

c# - 限制 CosmosDB 查询的 1000 条记录

c# - C# 中 OAuth 随机数的线程安全随机数/字符串生成器

WPF ListBox - 获取 UIElement 而不是 SelectedItem