将事件中的发件人设置为变量
本文关键字:设置 变量 事件 | 更新日期: 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,它只是收集不再引用的对象。