Как отображать разные подсказки в разных областях элемента управления - PullRequest
2 голосов
/ 29 апреля 2020

Я пытаюсь отобразить различный текст всплывающей подсказки в зависимости от того, над какой частью элемента управления наведен курсор. В качестве упрощенного примера это отобразит «Левый», если пользователь наводит курсор на левую половину, и «Правый», если пользователь наводит курсор на правую половину:

public partial class TestForm : Form
{
    private ToolTip toolTip = new ToolTip();

    public TestForm() {
        InitializeComponent();
    }

    private void TestForm_MouseMove(object sender, MouseEventArgs e) {
        if (e.X < Width / 2) {
            toolTip.SetToolTip(this, "Left");
        } else {
            toolTip.SetToolTip(this, "Right");
        }
    }
}

Проблема в том, что это вызывает инструмент Подсказка для отображения немедленно, а также следуйте за курсором вокруг. Есть ли способ заставить его вести себя так, будто разные регионы являются отдельными элементами управления?

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете добавить таймер, который будет вызывать всплывающую подсказку при задержке, когда мышь не перемещается.

Добавить таймер с некоторым интервалом, скажем, 1000 мс (1 сек c).

public TestForm()
{
    InitializeComponent(); 
    timer1.Enabled = true;
}

Пока мышь движется, она должна работать

private void TestForm_MouseMove(object sender, MouseEventArgs e) {
    //if (e.X < Width / 2) {
    //    toolTip.SetToolTip(this, "Left");
    //} else {
    //    toolTip.SetToolTip(this, "Right");
    //}

    timer1.Stop();
    timer1.Start();
}

И если она остановлена, вызвать всплывающую подсказку

private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Stop();

    if (PointToClient(Cursor.Position).X < this.Width / 2)
    {
        toolTip.SetToolTip(this, "Left");
    }
    else
    {
        toolTip.SetToolTip(this, "Right");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...