#c# #winforms #user-interface
#c# #winforms #пользовательский интерфейс
Вопрос:
Я хотел бы иметь возможность спроектировать что-то похожее на то, что вы видите, когда получаете исключение в Visual Studio, своего рода окно с линией, соединяющей окно с точкой в окне кода. Я включил изображение этого ниже:
Я замечаю, что всякий раз, когда окно кода теряет фокус, окно исключения исчезает. Однако, когда я сфокусирован, я могу перемещать окно, и стрелка продолжает указывать на цель.
Как это делается? В частности, как я могу провести линию из одного окна в другое?
Я пишу на C # и использую Windows Forms.
Ответ №1:
В вашем примере окно с исключением не всегда исчезает, если текстовое поле теряет фокус!
Проведя небольшое исследование с помощью инструмента Spy (поместите курсор find window точно на строку), вы заметите, что строка, которую вы видите между желтым текстом и окном исключения, содержится в окне (с прозрачным фоном) (с классом window типа «WindowsForms10.Window.8.app.0.34f5582_r41_ad1» в VS 2010). Это окно также имеет стиль WS_POPUP и является точной ограничивающей рамкой линии (его размер и положение точно соответствуют линии).
Итак, вы можете сделать то же самое: создайте прозрачное всплывающее окно, нарисуйте на нем линию и задайте его расположение и размер так, чтобы линия отображалась между нужными вам элементами управления.
Комментарии:
1. Это имеет наибольший смысл с точки зрения Windows API. Кроме того, отличный метод расследования!
Ответ №2:
Я не знаю точно, как это делается, но вы можете сделать что-то подобное с этой идеей.
- Создайте новую форму
- Переопределите событие рисования, чтобы оно не отображалось
- проведите линию из одного угла в другой (это может варьироваться в зависимости от направления линии
- Измените размер и расположите форму так, чтобы линия проходила между вашими двумя точками.
- Пока не уверен в части фокусировки!
Комментарии:
1. По сути, это то же самое, что и решение Андрея. Фокусировка — не такая уж большая проблема, но я кое-что заметил и решил, что должен упомянуть об этом.
2. @черт возьми — должно быть, он печатал быстрее меня
3. 🙂 да, я должен признать, что единственное, для чего я использую spy , — это получить дескриптор окна рабочего стола, чтобы я мог запускать заставки на рабочем столе : p