更改工具提示的光标

时间:2014-08-20 21:27:16

标签: c# winforms cursor tooltip

如何将鼠标悬停在工具提示上时设置显示的默认光标?我已经创建了一个自定义ToolTip类来调整颜色/字体,所以如果有必要,我可以在那里进行更改。

工具提示从窗体中的面板显示。面板的cursor属性设置为Cursors.Hand,我希望ToolTip匹配。我已经尝试在面板的MouseEnter事件中更改表单级别的光标,但它只是半功能的。它会在Cursors.Default和Cursors.Hand之间快速切换。当我在工具提示上移动光标时(好像提示正在强制使用默认光标)。

非常感谢任何帮助。

在iconPanel的MouseEnter上:

Cursor = Cursors.Hand;
if(!showingTip) {
    showingTip = true;
    changeIconTip.Show("Choose image...", iconPanel, 2, 2, 4000);        
}

在iconPanel的MouseLeave上:

Rectangle iconPanelArea = new Rectangle(iconPanel.PointToScreen(new Point(0, 0)), iconPanel.Size);
Point c = Cursor.Position;
if(!iconPanelArea.Contains(c)) {
    showingTip = false;
    changeIconTip.Hide(iconPanel);
    Cursor = Cursors.Default;
}

注意:在MouseLeave上,当光标悬停在工具提示上时,技术上它会“离开”iconPanel(即使它仍然在面板的边界内)。包含检查仅在光标离开面板时将光标设置回默认值。

1 个答案:

答案 0 :(得分:0)

我无法交替重现光标。在Windows 8.1上,当鼠标悬停在工具提示上时,光标会保持不变。试试这段代码:

public class Form3 : Form {

    Panel iconPanel = new Panel() { BackColor = Color.RosyBrown, Size = new Size(200, 200) };
    ToolTip changeIconTip = new ToolTip();
    bool showingTip = false;

    public Form3() {
        Controls.Add(iconPanel);

        iconPanel.MouseEnter += iconPanel_MouseEnter;
        iconPanel.MouseLeave += iconPanel_MouseLeave;
    }

    void iconPanel_MouseLeave(object sender, EventArgs e) {
        Rectangle iconPanelArea = new Rectangle(iconPanel.PointToScreen(new Point(0, 0)), iconPanel.Size);
        Point c = Cursor.Position;
        if (!iconPanelArea.Contains(c)) {
            showingTip = false;
            changeIconTip.Hide(iconPanel);
            Cursor = Cursors.Default;
        }
    }

    void iconPanel_MouseEnter(object sender, EventArgs e) {
        Cursor = Cursors.Hand;
        if (!showingTip) {
            showingTip = true;
            changeIconTip.Show("Choose image...", iconPanel, 2, 2, 4000);
        }
    }
}