Blaato Ответов: 1

Прослушивание наведения мыши, даже если форма скрыта или видна = false


Hi, I´m trying to implement AutoHide function to my C# winForm appBar for more then a week and I still dont have a solution. Now I have an idea how to do it diffrent then via SHAppBarMessage (cause I don´t know how to use it for autohide), but I´m looking for a way how to get if mouse is hover the form even if form is visible = false or hide(). Do anyone please know some example? Thank you very much, Blaato.


Что я уже пробовал:

Я ничего не пытаюсь сделать, потому что понятия не имею.

Ralf Meier

Я немного запутался ...
Если форма не видна ... как могла мышь оказаться над ним ? Вы должны дать гораздо больше информации ...

Blaato

Даже если форма не видна, она все равно имеет место и размер. Он все еще существует, просто его не видно. Так что теперь я думаю о мышеловке, но я никогда не работал с ней, так что это будет одна попытка за другой. Но если вы знаете лучший способ, я буду вам очень благодарен.

Ralf Meier

Почему я в замешательстве :
Обычно у вас есть несколько форм в одном проекте (3,4,5,6,7 ... и т. д.)
Часто все формы serverall расположены на одной и той же позиции (с одинаковым размером).
Так... как вы хотите решить, над какой из этих невидимых форм находится мышь в данный момент ?
И... для какого поведения вам нужна эта информация ?

Blaato

Как я уже писал, это панель приложений, так что теперь мы работаем только с одной формой, никакой другой не нужно. Мышиный крючок-это решение, как я уже сказал.
А теперь-зачем мне эта информация?. Как я уже сказал, я пытаюсь сделать свой appBar autohide, но я не знаю, как это сделать через SHAppBarMessage, поэтому я решил, что могу просто отменить регистрацию appBar и позволить ему находиться в том же положении экрана и сделать его скрытым. И когда мышь наводит форму, например, на 0 - > 2 верхних пикселя формы, она снова может быть видна. Так что это временное решение для функции автоматического скрытия на панели приложения AppBar.

Ralf Meier

Поэтому вы должны написать то, что вы имеете в виду ...
Ваша панель приложений (я ее не знаю) должна быть элементом управления, который вы установили в невидимый.
Теперь (если ваш элемент управления не виден) вы хотите показать его (сделать видимым) , если положение мыши находится в его местоположении - я прав до сих пор ?

Blaato

Да, вы правы. И есть ссылка, Что такое appBar: https://msdn.microsoft.com/en-us/library/windows/desktop/cc144177(v=против 85). aspx
Это то же самое, что и панель задач Windows.

Ralf Meier

смотрите мое решение ...

1 Ответов

Рейтинг:
2

Ralf Meier

Поместите этот метод в код вашей формы :

 protected override void OnMouseMove(MouseEventArgs e)
{
    if (button1.ClientRectangle.Contains(e.Location))
    {
        button1.Visible=true;
    }
    else
    {
        button1.Visible=false;
    }

    base.OnMouseMove(e);
}


В моем примере я использовал кнопку, чтобы показать и проверить эффект. Вам нужно только заменить " button1 "на свой контроль...


Blaato

Во-первых, большое вам спасибо за ваш код. Но это не может работать в моем случае, потому что в этом примере вы слушаете мышь на своей форме, которая активна, и устанавливаете видимое свойство на ее дочерней кнопке управления. Но когда ваша форма неактивна (не видна), вы не можете отслеживать положение мыши на ней таким образом.

Ralf Meier

Я сослался на ваш комментарий, где вы написали, что у вас есть только один из них, и панель является элементом управления в этой форме.
Если у вас нет формы (или форма невидима), вы не можете работать с любым событием формы или управления (как я писал ранее)...

Но то, что вы можете сделать, это :
- установите размер формы на размер элемента управления и найдите его, возможно, в верхней позиции экрана.
- работа с формой-непрозрачность (установите ее на "0", если вы не хотите видеть форму, и установите ее на 100%, если ваша мышь находится над ней ...

Blaato

Я никогда не говорил, что работаю с контролем над своей формой. Мне очень жаль, но AppBar-это известная вещь, и я предполагал, что все это знают. Это то же самое, что панель задач Windows, как я уже писал раньше. Но ничего, я найду свое решение. :)
Вы должны знать appBar для поиска решения rigth, но на самом деле спасибо Вам за всю вашу помощь.
Непрозрачность формы - это один из моих обходных путей, но он не идеален - в том случае, если моя панель приложений находится на верхнем краю:

Ширина формы - > 2пикселя
Непрозрачность - > 0
Регистрация панели приложений в windows- & gt; верхний край выбранного экрана
и слушая наведение мыши

Ralf Meier

"AppBar-это известная вещь, и я предполагал, что все это знают."

Как видите - не все это знают ...

Blaato

Да, похоже на то. :)