将事件中的发件人设置为变量

本文关键字:设置 变量 事件 | 更新日期: 2023-09-27 18:30:31

>我有 3 个与拖放有关的事件。

    object originalSender;
    private void lstBox_MouseDown(object sender, MouseEventArgs e)
    {
        ListBox curListBox = sender as ListBox;
        if (curListBox.SelectedItem == null) return;
        //this.lstLeft.DoDragDrop(this.lstLeft.SelectedItem, DragDropEffects.Move);
        curListBox.DoDragDrop(curListBox.SelectedItem, DragDropEffects.Copy);
        originalSender = sender;
    }
    private void lstBox_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Copy;
    }
    private void lstBox_DragDrop(object sender, DragEventArgs e)
    {
        var obj = e.Data.GetData(e.Data.GetFormats()[0]);
        if (typeof(DataGridViewColumn).IsAssignableFrom(obj.GetType()))
        {
            ListBox curListBox = sender as ListBox;
            Point point = curListBox.PointToClient(new Point(e.X, e.Y));
            int index = curListBox.IndexFromPoint(point);
            if (index < 0)
                if (curListBox.Items.Count > 0)
                    index = curListBox.Items.Count - 1;
                else
                    index = 0;
            ((ListBox)(originalSender)).Items.Remove(obj);
            curListBox.Items.Insert(index, obj);
        }

问题是当运行该方法时,"originalSender"lst_DragDrop为空。 我确定这是因为我引用了垃圾回收的发送者对象,因此为空。 如何引用作为发件人的列表框。

我有 3 个列表框都使用此方法,所以我需要知道正在选择哪个。

将事件中的发件人设置为变量

尝试在调用 DoDragDrop 之前移动 originalSender = sender 语句; DoDragDrop在同一线程上启动新的消息泵,因此当前在拖放操作结束之前不会执行该语句。


作为旁注:

确定这是因为我引用了垃圾收集的发送者对象,因此为空

不,这是不可能的。你倒过来了:垃圾回收器从不将对象引用设置为 null,它只是收集不再引用的对象。