Всплывающие подсказки Windows не отображаются - PullRequest
3 голосов
/ 13 января 2010

У меня есть код, который устанавливает всплывающую подсказку стандартным способом для элементов управления Winforms вот так : -

Подсказка всплывающей подсказки = новая подсказка ();

toolTip.SetToolTip ( control , text );

В том же приложении есть окно, которое воспроизводит фильм с некоторыми изображениями со скоростью 5 кадров в секунду, используя Direct3D SDK. Теперь, когда фильм отображается, то есть когда он находится в режиме просмотра, подсказки никогда не появляются. Как только я приостанавливаю фильм, появляются подсказки.

  • Случай 1:

В качестве обходного пути я сделал следующее изменение в коде -

Подсказка всплывающей подсказки = новая подсказка ();

toolTip.InitialDelay = 50;

toolTip.SetToolTip ( control , text );

Теперь, когда я начну вводить ЗАДЕРЖКУ, подсказки будут отображаться независимо от того, воспроизводится фильм или нет?

  • Случай 2:

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

Кто-нибудь может исправить меня в том, что здесь не так при рендеринге всплывающих подсказок? Я использую .Net 2.0 & C #.

Ответы [ 3 ]

0 голосов
/ 13 января 2010

См. Компонент подсказки (Windows Forms) в http://msdn.microsoft.com/en-us/library/he23h308(VS.85).aspx. В частности, проверьте Как: установить подсказки для элементов управления в форме Windows во время разработки в http://msdn.microsoft.com/en-us/library/s894w4aa(VS.80).aspx.

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

0 голосов
/ 16 января 2010

Измените это для вашего случая. Должно сработать. Вы должны установить все эти свойства.

            // Create the ToolTip and associate with the Form container.
            ToolTip toolTip = new ToolTip();

            // Set up the delays for the ToolTip.
            toolTip.AutoPopDelay = 15000;
            toolTip.InitialDelay = 300;
            toolTip.ReshowDelay = 300;
            // Force the ToolTip text to be displayed whether or not the form is active.
            toolTip.ShowAlways = true;

            // Set up the ToolTip text for the Buttons
            toolTip.SetToolTip(this.button2, "TooltipText1");
            toolTip.SetToolTip(this.button3, "TooltipText2");
0 голосов
/ 13 января 2010

D3D-видео и всплывающие подсказки используют оверлеи (количество программ захвата экрана, которые я использовал, которые не захватывают всплывающие подсказки из-за этого!); поэтому я считаю, что вы видите некоторые помехи от наложения D3D.

Возможно, видео перерисовывает всплывающую подсказку, потому что оно воспроизводится во время воспроизведения - поэтому подсказка есть, вы просто не можете ее увидеть.

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

Конечно, я бы использовал это в качестве обходного пути, а не многократно создавал и назначал всплывающую подсказку, поскольку, как говорится в другом ответе, это может убить ресурсы.

Я бы нашел наименьший возможный InitialDelay, который работает и пошел бы с этим.

Наконец - о какой версии Windows и DX мы здесь говорим? Есть пара других потоков, начинающихся с здесь и в ссылке на GameDev внутри, о проблемах с подсказками и DirectX; и укажите на то, что здесь может происходить нечто большее, чем просто странная странность .Net!

...