当TreeNode
中的TreeView
悬停时,应显示ToolTip
。当鼠标离开TreeNode
时,ToolTip
应该消失。我尝试通过获取MousePosition
的{{1}}和PontToClient()
Show()
,只要ToolTip
没有改变。它有效,但看起来不太好。 MousePosition
消失或不显示鼠标是否移动最轻微。
这给出了一些有效的结果
ToolTip
相反,只要private void treeView_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
ToolTip tip = new ToolTip();
tip.ToolTipTitle = e.Node.Name;
Point client = PointToClient(MousePosition);
while (client == PointToClient(MousePosition))
{
tip.Show(e.Node.Nodes.Count.ToString(), this, PointToClient(MousePosition));
}
tip.Dispose();
}
的{{1}}与触发事件的ToolTip
相同,我就会尝试显示TreeNode
。但现在MousePosition
从未显示过?
TreeNode
更新
我刚才意识到这个结果会出现以下异常?
ToolTip
对象引用未设置为对象的实例
答案 0 :(得分:1)
String Availability = json.getString("Availability");before parsing value ="4"
int x = Integer.parseInt(Availability);here after parsing it gives me 2 i don't know why
会返回treeView.GetNodeAt(MousePosition)
,因此您无法从中访问属性null
。
Name
是鼠标指针在屏幕上的位置,而不是您的控件。所以,让我们假设您的指针位于屏幕中间,因此坐标将类似于x:1000,y:500。但是,MousePosition
需要树视图中的坐标,其中,例如,第一个节点位于x:20和Y:50坐标。
您必须将这些坐标转换为相对于您的树视图,如下所示:
GetNodeAt()
<强>更新强> 在第二个示例中,正确使用将是:
var point = treeView.PointToClient(MousePosition);
var node = treeView.GetNodeAt(point);
但是,为了简化事情(并避免闪烁,工具提示的不断初始化等),我会将ToolTip声明移出方法并将其放入表单的范围,然后在悬停时显示ToolTip并在鼠标移动时隐藏它。 像这样:
private void treeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
ToolTip tip = new ToolTip();
tip.ToolTipTitle = e.Node.Name;
while (e.Node == treeView.GetNodeAt(treeView.PointToClient(MousePosition)))
{
tip.Show(e.Node.Nodes.Count.ToString(), this, PointToClient(MousePosition));
}
tip.Dispose();
}