Сам WebBrowser не предоставляет координаты щелчка мышью: вы фактически не щелкаете по клиентской области Control, а щелкаете по содержимому документа.
Вы можете использовать события HtmlDocument.Click или HtmlDocument.MouseDown для получения координат указателя мыши в инициализированных HtmlDocument [ 1118].
Примечание :
Объект HtmlElementEventArgs возвращает координаты мыши в обеих абсолютных координатах (всей области документа) в e. ClientMousePosition и относительно нажатой HtmlElement
, в e.OffsetMousePosition .
Это может быть сложно, потому что вам нужно подписаться на событие Click
, когда текущий HtmlDocument уже создан: вы не можете подписаться на событие объекта Document по умолчанию:
, т.е. подписка на событие в Form.Load
с:
webBrowser1.Document.Click += (obj, evt) => { /*Do something */ };
ничего не добьется. Событие никогда не будет инициировано: Document null
, поэтому, конечно, это не ссылка на какой-либо текущий / активный HtmlDocument.
HtmlDocument
готово, когда возникает событие WebBrowser.DocumentCompleted и для его ReadyState установлено значение WebBrowserReadyState.Complete
.
Вы можете подписаться на событие Document.Click
, когда документ полностью загружен, а затем удалить событие, прежде чем веб-браузер перейдет на новую страницу, создав новый документ.
Кроме того, событие DocumentCompleted
может быть вызвано несколько раз для одной страницы HTML
, поэтому вам следует убедиться, что вы не подписываетесь на одно и то же событие несколько раз:
[1137 ] Примечание :
A HtmlDocument
может содержать более одного Frame/IFrame
, и каждый Frame
может иметь свой собственный HtmlDocument
; IFrames
наверняка есть по одному. Обратитесь к примечаниям в этом вопросе для получения дополнительной информации по этому вопросу:
Как получить значение HtmlElement внутри Frames / IFrames?
Пример:
[ 111]
Я соглашаюсь, что лучший метод потока операций должен написать Ваш код в отдельном буфере и оценить в этом, а не ввести функции в repl.
Принятие Вас пошло repl путем, я предполагаю, C. Решением Martin сохранить журнал repl и вручную пройти его являются Ваши единственные опции.
При вводе функций и Вара в отдельный пакет Вы могли бы пройти символы в пакете, чтобы помочь Вам решить то, что Вы хотите сохранить.
Например, видеть все символы, созданные в пакете пользователя статьи:
(let ((p (find-package :cl-user)))
(loop
for s being the symbols in p
when (eq p (symbol-package s))
do (format t "~a~%" s)))
Я не получаю его. Вы вводите определения в REPL и ожидаете восстанавливать их позже? Просто сохраните исходный файл, как Вы были бы на любом другом языке. Используйте C-x 2 для разделения окна Emacs в два. Откройте исходный файл в одном из них C-x C-f foo.lisp. Используйте C-c C-k, C-c C-r и друзей (см. меню SLIME) для компиляции / оценивают регионы исходного кода в REPL.
Я искал что-то вроде этого в прошлом и не мог найти его. Вы являетесь лучшими от записи всех Ваших определений в отдельном буфере, и использование обширных функций оценки/компиляции СЛИЗИ (C-c C-k загружает весь файл, C-x C-e оценивает последнее выражение, C-c C-r оценивает регион, и т.д.), только непосредственно вводя в вещи REPL, которые Вы не хотите сохранять.
Гм, C-x o
или C-x b
получить к СЛИЗИ буфер REPL, затем C-x w
или C-x C-s
сохранить его в файл. Весь материал СЛИЗИ/CL является комментарием читателя; можно или записать взлом читателя для перезагрузки файла, рассматривающего подсказки как комментарии, или можно пройти файл сами для получения частей, которые Вы хотите сохранить.