当DraggedNode在TreeView中停留两秒后展开节点.c#
本文关键字:两秒 节点 DraggedNode TreeView 停留 | 更新日期: 2023-09-27 18:17:06
我有一个TreeView在我的程序与拖放功能,我试图找到一种方法来扩展一个节点后另一个节点(DraggedNode)站超过2秒超过它。我认为更好的方法是使用计时器(但我真的不知道如何使用它们)。这是我的代码。
private void treeView1_DragOver(object sender, DragEventArgs e)
{
TreeNode targetNode;
TreeNode draggedNode;
GetDraggedAndTargetNode(e, out targetNode, out draggedNode);
e.Effect = DragDropEffects.Move;
if (!targetNode.IsExpanded)
{
// set a Timer of 2 seconds
//System.Timers.Timer aTimer = new System.Timers.Timer();
//aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
//aTimer.Interval = 2000;
//aTimer.Enabled = true;
targetNode.Expand();
}
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
// ???
}
谢谢。
访问UI元素时不要使用System。计时器,但普通的窗口。定时器就像工具箱里的那个!
将计时器声明移到事件之外,这样它就可以继续存在。
在它的Tick事件中停止计时器并做其他事情。要访问应该展开的节点,您可能还需要在某处存储对它的引用。
theTargetNode = null
Timer aTimer = new Timer();
private void treeView1_DragOver(object sender, DragEventArgs e)
{
TreeNode targetNode;
TreeNode draggedNode;
GetDraggedAndTargetNode(e, out targetNode, out draggedNode);
e.Effect = DragDropEffects.Move;
if (!targetNode.IsExpanded)
{
theTargetNode = targetNode;
// set a Timer of 2 seconds
aTimer.Tick += aTimer_Tick;
aTimer.Interval = 2000;
aTimer.Enabled = true;
}
}
private void aTimer_Tick(object source, EventArgs)
{
aTimer.Stop();
aTimer.Tick -= aTimer_Tick;
if (theTargetNode != null) theTargetNode.Expand();
}
你还应该考虑在用户离开树等时停止计时器