简单的拖放Drop事件处理问题

发布于 2024-10-12 07:26:51 字数 1490 浏览 6 评论 0原文

我是在 C# .NET 中使用事件处理的新手,我试图了解我正在尝试的一些简单代码背后的行为。我正在处理一个更复杂的示例,但我希望如果我简化示例,我会得到更有针对性的答案。

我有以下代码,它定义了一个主窗口,其中包含一个用值初始化的列表框,以及窗口中的一个面板。我正在将列表框项目拖放到面板中。为了表示面板正在读取 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;
    }

}

我意识到这是一个过于简单化的例子。如果您看到我做错了什么,请告诉我。
编辑为了举一个为什么我感到困惑的例子,我改变了这个例子,在触发 DragOver 事件时将拖动的 ListBox Item 文本放入 Textbox 中,并且它工作得很好,但是当我尝试当他们将值放在文本框上时做同样的事情,我无法让它工作。

I am new to using Event Handling in C# .NET, and I am trying to understand the behavior behind some simple code that I am experimenting with. I am working with a more complicated example, but I am hoping I will get a more focused answer if I simplify the example.

I have the following code which defines a main window with a ListBox that is initialized with values, and a panel in the window. I am working with dragging the ListBox Items and dropping them in the panel. To signify that the panel is reading the DragDrop event, I am simply just changing the background color.

My problem is, it is not changing the background color when I drop the values, hence, the DragDrop is not working. I know this is a bit exaggerated, but I am trying to understand why its not working.

Here is the following code that I am using.

     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;
    }

}

I realize this is an oversimplified example. If you see what I am doing wrong, then please let me know.

EDIT To give an example of why I am confused, I change this example around to put the dragged ListBox Item text into a Textbox when the DragOver event was fired, and it worked fine, but when I tried to do the same thing when they dropped the values over the textbox, I could not get it to work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月静好 2024-10-19 07:26:51

处理面板的 DragEnter 事件并将 e.Effects 设置为 None 以外的其他值。

Handle the panel's DragEnter event and set e.Effects to something other than None.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文