Как проверить, действительно ли окно видимо в Windows Forms?

TreeMap побеждает HashMap, потому что TreeMap уже отсортирован для Вас.

Однако Вы могли бы хотеть рассмотреть использование более соответствующей структуры данных, сумки. См. Наборы палаты общин - и класс TreeBag :

Это имеет хорошую оптимизированную внутреннюю структуру и API:

bag.add("big")
bag.add("small")
bag.add("big")
int count = bag.getCount("big")

РЕДАКТИРОВАНИЕ: на вопрос HashMap по сравнению с работой TreeMap ответил Jon - HashMap и вид могут быть более быстрыми (попробуйте его!), но TreeBag легче. То же верно для сумок. Существует HashBag, а также TreeBag. На основе реализации (использует изменяемое целое число) сумка должна превзойти эквивалентную простую карту по характеристикам Целого числа. Единственный способ знать наверняка состоит в том, чтобы протестировать, как с любым вопросом о производительности.

9
задан SLaks 30 October 2009 в 14:17
поделиться

5 ответов

You can call the Activate method on the form to bring it to the front if it isn't already.

However, note that if a different program is active, it will usually simply flash the desktop button (depending where you call it from). This is Windows' standard protection against focus-stealing and you should not try to work around it.

5
ответ дан 4 December 2019 в 11:42
поделиться

Вы можете использовать Windows API, чтобы перечислить все окна, получить их Z-порядок и сравнить его с Z-порядком вашего окна. Я думаю, что кто-то уже делал это здесь .

4
ответ дан 4 December 2019 в 11:42
поделиться

To answer the question as asked, you could try calling the WindowFromPoint API function to find the window at various points on your form, and check whether it returns the handle of whatever you expect to be at that point.

3
ответ дан 4 December 2019 в 11:42
поделиться

Hm... weird question. :P

Perhaps you could ask the location of the forms, and if two forms interlap (figure out their coords, and make a simple method) check if one form has Focus(). If it has focus, then other must be "invisible" (in the sense that a user can't see it because it's underneath the other form).

Obviously this method is hacky at best, but it's something you can start working with.

1
ответ дан 4 December 2019 в 11:42
поделиться

Вы сможете узнать, отображается ли ваше окно, переопределив метод OnPaint. Вы захотите передать управление базовому классу, чтобы выполнить фактическое рисование, но вы сможете определить, получено ли сообщение рисования. Обновление: нет, это не работает, извините!

В принципе, метод Activate должен выводить ваше окно на передний план, но на практике я всегда считал это проблематичным, если другие процессы имеют фокус ввода. Если вы действительно хотите, чтобы кто-то увидел окно, установите самый верхний бит, но ожидайте, что он будет раздражен! Один из верных способов привлечь внимание к окну - закрыть его и снова открыть, если вам это удастся.

Один из способов добиться того, что вы ищете, - использовать значок уведомления, он получит внимание пользователя в соответствии с рекомендациями по пользовательскому интерфейсу Windows.

0
ответ дан 4 December 2019 в 11:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: