- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在 TreeView
节点上添加一个 ToolTip
并在鼠标坐标处显示一个气球:
private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
node = treeView1.getNodeAt(e.X, e.Y);
toolTip1 = new ToolTip();
toolTip1.IsBalloon = true;
toolTip1.InitialDelay = 500;
toolTip1.SetToolTip(treeView1, node.Text);
}
问题是ToolTip
被分配给了TreeView
,而不是TreeNode
,而且气球的位置很奇怪- 不是在预期的鼠标坐标处,而是在 treeView1
中的某处。
我尝试使用 toolTip1.Show()
但 InitialDelay
属性被忽略了。
如何将气球 ToolTip
放置在 TreeNode
上并延迟其显示?
最佳答案
ToolTip
控件对于显示 TreeNodes
的工具提示不是必需的。 TreeView
有一个属性 ShowNodeToolTips
,您可以将其设置为 true
并且 TreeNodes
有一个 ToolTipText
属性。
但是,如果您想将 ToolTip
显示为气球,事情就会变得更加复杂。幸运的是 TreeView
有一个 NodeMouseHover
事件。与 Timer
一起,我们可以使我们的 ToolTip
按预期运行。
在我们的表单中,我们进行这些声明并设置定时器事件处理程序
private const int InitialToolTipDelay = 500, MaxToolTipDisplayTime = 2000;
private ToolTip toolTip = new ToolTip();
private Timer timer = new Timer();
private TreeNode toolTipNode;
public frmTreeViewWithToolTip()
{
InitializeComponent();
toolTip.IsBalloon = true;
timer.Tick += new EventHandler(timer_Tick);
}
在 NodeMouseHover
中我们启动流程
private void treeView_NodeMouseHover(object sender,
TreeNodeMouseHoverEventArgs e)
{
timer.Stop();
toolTip.Hide(this);
toolTipNode = e.Node;
timer.Interval = InitialToolTipDelay;
timer.Start();
}
计时器将启动两次:一次用于初始延迟,一次用于气球的最大显示时间。因此我们必须在 timer.Tick
事件处理程序中处理这两种情况
void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
if (timer.Interval == InitialToolTipDelay) {
Point mousePos = treeView.PointToClient(MousePosition);
// Show the ToolTip if the mouse is still over the same node.
if (toolTipNode.Bounds.Contains(mousePos)) {
// Node location in treeView coordinates.
Point loc = toolTipNode.Bounds.Location;
// Node location in form client coordinates.
loc.Offset(treeView.Location);
// Make balloon point to upper right corner of the node.
loc.Offset(toolTipNode.Bounds.Width - 7, -12);
toolTip.Show("Node: " + toolTipNode.Text, this, loc);
timer.Interval = MaxToolTipDisplayTime;
timer.Start();
}
} else {
// Maximium ToolTip display time exceeded.
toolTip.Hide(this);
}
}
最后,如果鼠标离开 TreeView
,我们不想显示 ToolTip
private void treeView_MouseLeave(object sender, EventArgs e)
{
timer.Stop();
toolTip.Hide(this);
}
关于c# - 将气球工具提示定位在树节点上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043352/
我的 friend 编写了一个程序,它比较随机排列的骰子面,以找到分布最均匀的面——尤其是当面不仅仅是序列时。 我将他的程序翻译成 haskell 是因为我一直在寻找一个理由来让别人知道 haskel
我需要对表单中的某些字段进行评论/提示。我的想法是在模型中描述它,就像attributeLabels一样。我该怎么做? 然后它会是理想的,如果 Gii 模型(和 Crud)生成器直接从 mysql 列
我们使用 FastReport 来生成报告。事实上,我们为访问源代码付费。 我们目前使用的是 FastReport 的最新稳定版本。虽然它对于我们的生产来说足够稳定,但每当我编译时,我都会看到以下内容
我需要创建一个对话框/提示,包括用于用户输入的文本框。我的问题是,确认对话框后如何获取文本?通常我会为此创建一个类,将文本保存在属性中。不过我想使用 XAML 设计对话框。因此,我必须以某种方式扩展
我想提示用户是否要执行操作(删除) - 用警报框说"is"或“否”,如果是,则运行删除脚本,如果否,则不执行任何操作 我不太了解 javascript,因此是否有人可以使用 javascript 获得
所以我正在编写一个简单的 JS 代码。我们刚刚开始学习函数。我需要创建一个名为“printStars”的函数。 我需要从用户那里获取一个号码,并根据该号码打印“*”。 这就是我所做的:
我在我的页面上添加了一个提示,但它在页面加载之前加载了。如何仅在整个页面可见时才显示消息? 这是我的提示: if (name == null || name == "") { txt == "No
我在我的页面上添加了一个提示,但它在页面加载之前加载了。如何仅在整个页面可见时才显示消息? 这是我的提示: if (name == null || name == "") { txt == "No
我正在自定义我的 zsh 提示,并发现以下内容来检查是否有任何后台作业: if [[ $(jobs | wc -l) -gt 0 ]]; then # has background job(s)
这个问题在这里已经有了答案: JavaScript object: access variable property by name as string [duplicate] (3 个答案) pa
我正在尝试用 javascript 制作一个简单的数学练习程序。在提示警报中给出不同的值,并将答案与用户输入进行比较。这是代码: Calculations generate(); functio
在这段代码中,尽管我使用了文本对齐属性在“编辑文本” View 的中心设置“提示”。但它无法正常工作。 最佳答案 尝试 关于android - 如何在编辑文本的中心对齐文本(提示),我们在Sta
我正在尝试让我的 EditText 显示一个提示,例如“请在此处输入答案”,当用户点击 EditText 以键入他们的答案时,文本应该消失并留空,以便他们在其中输入答案. 截至目前,这就是我的 .xm
我当前的 android 应用程序中有两个微调器,我想要一个默认值,例如 editText 的 android:hint 功能。有没有办法这样做,但不会将提示添加到填充微调器的字符串数组。例如从微调器
如果我的表单已完全填写,我如何提示“感谢您填写表单,“name”!” function submit_onclick() { if(confirm("Thanks for completing t
我刚刚了解了prompt()命令;我知道 Prompt() 命令以字符串的形式返回用户输入。我正在搞乱下面的程序,我输入了Per“Dead”Ohlin作为男性名字。为什么这有效并且没有引起任何问题?
void openUpNow(FILE *x, FILE *y) { x = fopen("xwhatever", "r"); y = fopen("ywhatever", "r");
我有一个作业正在处理,但我在使用 prompt() 方法时遇到了问题。我看到我可以做一个提示,但我需要几个并且有数量。 例如... 我创建了一个 HTML 表格,其中包含许多艺术家和包含 DVD、CD
我正在学习 Big Nerd Ranch 的 iOS Programming, 2nd Edition,我已经来到第 4 章挑战:标题。该练习暗示我感到困惑;它说我需要做一些我认为不需要做的事情。 到
抱歉,如果这是微不足道的,但我没有找到任何解决此问题的建议。我在 Ubuntu 上,我的 Yii 项目需要 PHPUnit。我已经安装了 PHPUnit 两次,方法是下载 phpunit.phar 并
我是一名优秀的程序员,十分优秀!