Буфер обмена visual studio code

Обновлено: 03.07.2024

Это функция, которой я пользуюсь постоянно, и я без труда использую код Visual Studio.

Команды, которые вы ищете, являются editor.action.copyLinesDownAction и editor.action.copyLinesUpAction .

Вы можете увидеть связанные сочетания клавиш, выбрав: Файл> Настройки> Сочетания клавиш

Окна:

Shift + Alt + Down и Shift + Alt + Up

Mac:

Shift + Option + Down и Shift + Option Up

Linux:

Ctrl + Shift + Alt + Down И Ctrl + Shift + Alt + Up

(Возможно, нужно использовать Numpad Down и Up для Linux)

Кроме того, команды editor.action.moveLinesUpAction и editor.action.moveLinesDownAction являются теми, которые перемещают строки, и они связаны с Alt + Down и Alt + Up в Windows и Mac и Ctrl + Down и Ctrl + Up в Linux.

И кажется Alt+Up или Alt+Down перемещает существующую линию вверх и вниз. Ницца Стоит отметить, что действия copyLines существуют не в полной версии Visual Studio, а только в коде Visual Studio. Инструменты | Варианты | Окружающая среда | Клавиатура в VS2015 Вы знаете, как «дублировать выделение»? Я не смог найти подходящую команду :( В Linux ctrl+shift+alt+down/up работает только для клавиш со стрелками num pad.

Вы можете найти сочетания клавиш от

Сочетания клавиш по умолчанию:

Действие «Копировать линии вниз» : shift + alt + down

Действие «Копировать линии вверх» : shift + alt + up

Движение вверх по линии : alt + up

Движение Линии Вниз Действие : alt + down

Или вы можете переопределить сочетания клавиш из

И редактирование keybindings.json

Кроме того, если вам нужно переместить строку далеко, Ctrl + C и Ctrl + X легко скопировать / вырезать текущую строку без необходимости ее выбора. И ctrl + L (команда expandLineSelection ) выберет строку. Повтор Ctrl + L выделяет дополнительные строки, облегчая выбор блока. Или вы можете сделать грубый выбор блока с помощью мыши, а затем Ctrl + L, чтобы включить концы.

Он пропускает ответ на этот вопрос «Как дублировать выделение кода», похожий на поведение Sublime's cmd / ctrl + shift + d или Jetbrains cmd / ctrl + d .

Установите плагин Duplicate selection или строку из VS Code Marketplace

Дубликат выделения или строка VS Code plugin

Это расширение обеспечивает привязки для ctrl + d (Windows / Linux) и cmd + d (MacOS). Чтобы настроить сочетания клавиш Настройки -> Сочетания клавиш:

Примечание . Ярлык также выполняет дублирующую строку, поэтому, если вы установите его, удалите свой предыдущий ctrl + d ярлык на copyLinesDownAction (если вы это делали ранее), иначе дублирующийся выбор может вызвать ошибку.

Я был разочарован ярлыком «копировать строки вниз», который не совсем работал как функция Sublime Text / Intellij Ctrl + D (он копировал целые строки, а не только выделение). Спасибо за указание на этот плагин! Я собирался отказаться от vscode и установить atom, но это расширение помешало мне. дублирующая функциональность vscode по умолчанию не на должном уровне. атом намного лучше в этом отношении.

В VScode они называют это Copy Line Up и Copy Line Down

Из меню перейдите к:

Проверьте уже назначенные сочетания клавиш для этого или настройте свой.

Иногда назначенный по умолчанию ярлык может не работать, в основном из-за ОС.

В моей Ubuntu я настроил это так: Ctrl + Shift + D

введите описание изображения здесь

В VSCode Ctrl + C Ctrl + V дублирует всю строку ниже.

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

Принятый ответ, вероятно, сделает это для большинства людей, однако Down находится на другой стороне клавиатуры. Таким образом, у вас есть два варианта: использовать обе руки (левая рука: L Shift + L Alt + правая рука:) Up/Down или одной рукой использовать правую R Shift + R Alt + Up/Down . Второй вариант кажется странным, на мой взгляд. Я предпочел бы использовать вариант, когда моя рука естественно сидит на клавиатуре, и если это одна рука, даже лучше.

Основная проблема в том, что вы теряете то, что было в вашем буфере обмена

Попробуйте ALT + SHIFT + UP / DOWN

Это сработало для меня!

Обратите внимание, что для пользователей Ubuntu (<= 17,4) Unity использует CTRL + ALT + SHIFT + Arrow Key для перемещения программ по виртуальным рабочим областям, что противоречит сочетаниям клавиш VS Code. Вам нужно будет выполнить повторную привязку editor.action.copyLinesDownAction и editor.action.copyLinesUpAction избежать конфликта (или изменить привязки клавиш рабочей области).

Я на Ubuntu 19.10 и Ctrl + Alt + Down по-прежнему перемещается между рабочими пространствами.

Для пользователей Jetbrains IDE, которые перешли на VSCode , нет проблем.

Установите:
1) JetBrains IDE Keymap: расширение
2) vscode-intellij-idea-keybindings Extension (Preferred)

Используйте это Intellij Darcula Theme : Расширение

Карта клавиш покрывает большинство сочетаний клавиш VS Code и делает VS Code более похожим на JetBrains IDE .

Вышеуказанные расширения импортируют привязки клавиш из JetBrains в VS Code. После установки расширения и перезапуска VS Code вы можете использовать VS Code так же, как IntelliJ IDEA, Webstorm, PyCharm и т. Д.

Для Windows :

Копировать вверх - shift + alt + up

Копировать вниз - shift + alt + down

Для Mac :

Копировать вверх - shift + option + up

Копировать вниз - shift + option + down

Для Linux :

Копировать вверх - ctrl + shift + alt + 8

Копировать вниз - ctrl + shift + alt + 2

Примечание . Вы можете изменить комбинацию клавиш для сочетания клавиш для кода Visual Studio, нажав ctrl + shift + p , затем напечатайте сочетание клавиш на клавиатуре и нажмите «Ввод», чтобы открыть новый файл (файл сочетаний клавиш), чтобы увидеть все сочетания клавиш на их и можете изменять привязки клавиш, дважды щелкнув по соответствующей привязке клавиш, а затем, введя собственную привязку клавиш, наконец нажмите Enter.

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

Для VSCode созданы тысячи расширений. Я намерен представить несколько из них, которые использую каждый день. Приступим!


Quokka.js

Quokka.js — это плагин для JavaScript и TypeScript, который отображает результаты выполнения кода в редакторе, непосредственно во время его написания. Попробуйте сами!

Установив расширение, нажмите Ctrl/Cmd(⌘) + Shift + P, чтобы запустить палитру команд редактора, и затем введите Quokka, чтобы увидеть список доступных команд плагина. Выберите и запустите команду New JavaScript File или нажмите ⌘ + K + J, чтобы создать новый файл. Любой введенный код будет выполнен немедленно.

Похожие расширения:

    — поддерживает множество языков (C, C++, Java, JavaScript, PHP, Python, Perl, Perl 6 и другие); .

Bracket Pair Colorizer & Indent Rainbow

Квадратные и круглые скобки — неотъемлемая часть многих языков программирования. В таком языке как Javascript, простая станица может иметь целый поток этих символов, среди которых тяжело отличить пары открытых и закрытых скобок. В этот момент на помощь приходят Bracket Pair Colorizer и Indent Rainbow. Это два разных расширения. Однако, вместе они представляют отличную комбинацию. Эти расширения наполнят ваш редактор морем красок, сделают блоки кода отличимыми друг от друга и придадут им приятный вид.



Без Bracket Pair Colorizer и Indent Rainbow



Установив Bracket Pair Colorizer и Indent Rainbow

Сниппеты

Сниппеты — это сокращения в редакторе, трансформируемые в полноценный код. Вместо import React from 'react'; пишем imr и жмем Tab, чтобы развернуть сниппет. В частности, clg разворачивается в console.log .

Существует множество сниппетов для разных направлений: JavaScript (или другие языки), React, Redux, Angular, Vue, Jest. Лично я считаю JavaScript сниппеты очень полезными, особенно с тех пор как начал работать преимущественно с JS.

Несколько хороших расширений со сниппетами:

Todo Highlighter

Часто бывает, написав функцию, вы понимаете, что есть лучший способ написать то же самое. Вы оставляете комментарий // TODO: Необходим рефакторинг , но затем забываете об этом и выкладываете код в production. C Todo Highlighter подобного не произойдет.

Плагин выделяет TODO/FIXME или другие комментарии в яркие цвета, что довольно тяжело не заметить. Модное нововведение Todo Highlighter — список выделенных комментариев, который выводится в консоли.


Todo Highlighter

Похожие расширения:

    — более мощный плагин, с множеством новых возможностей; .

Import Cost

Это расширение позволяет увидеть размер импортируемых модулей. Вы сможете понять, в каком месте вы импортируете библиотеку целиком, а в каком конкретную ее часть. Это окажет неоценимую помощь со сборкой проекта в Webpack.

Import Cost

Rest Client

Rest Client

Auto Close Tag & Auto Rename Tag

Они также работают с JSX и множеством других языков (XML, PHP, Vue, JavaScript, TypeScript, TSX).

Auto Rename Tag

Auto Close Tag

Похожие расширения:

GitLens

Со слов автора, GitLens расширяет возможности Git, встроенного в Visual Studio Code. Плагин включает удивительное количество функций, таких как указание автора, поиск коммитов, история и проводник. Вы можете изучить полное описание этих возможностей здесь. Если вы работаете с Git, то вы обязаны установить этот плагин.

Существуют другие расширения, выполняющие специфические задачи. Если GitLens оказался для вас слишком объемным или вам не требуется большая часть его функций, то советую взглянуть на следующий список:

    — отображает красивый граф истории коммитов. Рекомендуется. — позволяет увидеть информацию о текущей строке. Похожая функция встроена в GitLens. — позволяет увидеть изменения в файлах и количество добавленных и удаленных строк. — дает возможность, одной командой, открыть репозиторий в браузере.

Git Project Manager

GPM позволяет открыть окно с новым репозиторием напрямую из редактора. Проще говоря, вы можете открыть другой репозиторий не покидая VSCode.

После установки данного расширения, пропишите gitProjectManager.baseProjectsFolders в список адресов, содержащих репозитории.


Похожие расширения:

    — лично не использовал, но он имеет более миллиона загрузок. Стоит попробовать.

Indenticator

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

Indenticator

Похожие расширения:

VSCode Icons

Новые иконки придадут редактору привлекательности!

VSCode Icons

Похожие расширения:

Dracula (Theme)


Полюбившийся мне внешний вид.
Dracula theme

Я отлаживаю в Visual Studio Code, и у меня есть объект JSON, который я хотел бы скопировать в виде текста в буфер обмена.

Возможно ли это внутри Visual Studio Code?

4 ответа

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

Я пытаюсь автоматически скопировать содержимое переменной в буфер обмена в скрипте python. Итак, создается переменная, содержащая строку, и я хотел бы скопировать эту строку в буфер обмена. Есть ли способ сделать это с помощью Pyclips или os.system(echo '' | pbcopy) Я пытался передать переменную.

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

Использовать console.log

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

  1. В консоли отладки напишите console.log(JSON.stringify(yourJsonObject))
  2. Скопируйте полученный вывод из консоли отладки. Это может быть немного утомительно для длинных строк, но комбинация мыши и клавиатуры (ctrl-shift-end) сработала для меня нормально.

Используйте часы (не более 10 000 символов)

Этот метод работает только до ограниченного размера результирующей строки json (она выглядит как 10 000 символов).

  1. Установите точку останова в разумном месте, где ваша переменная находится в области видимости, и запустите приложение.
  2. Перейдите в представление отладки, добавьте часы для временной переменной, например tmpJson
  3. Поставьте точку останова.
  4. В консоли отладки напишите var tmpJson = JSON.stringify(yourJsonObject)
  5. Теперь наблюдаемая переменная tmpJson будет заполнена строковым представлением вашего объекта json
  6. В представлении отладки щелкните правой кнопкой мыши наблюдаемую переменную и выберите команду копировать.

Но это сработало бы для небольших объектов. Может быть, это поможет некоторым людям. Было бы здорово, если бы это было правильно встроено в vscode.

  1. Перейдите на панель VARIABLES и щелкните правой кнопкой мыши, чтобы отобразить контекстное меню переменной
  2. выберите Установить значение
  3. Ctrl + C

(проверено на Java, а не на JavaScript)

У меня есть простой обходной путь, чтобы скопировать все, что вы хотите:

  1. В консоли отладки напишите JSON.stringify(yourJsonObject)
  2. Скопируйте строку без двойных кавычек " вокруг строки

Откройте браузер, например Chrome, откройте инструмент проверки, перейдите на консоль и напишите:

Объект теперь копируется на вашей клавиатуре !

Если вы отлаживаете Python :

Например, в типе консоли отладки :

Мне нравится использовать Intellij. У него есть много замечательных функций, но мне также не нравится тот факт, что он автоматически копирует выделение в буфер обмена во время некоторых действий (выделение с помощью некоторых событий мыши, с удалением, некоторые сочетания клавиш, я думаю, кроме.

Я отлаживаю приложение Node.js в Visual Studio Code 1.0.0 и хочу скопировать все содержимое консоли отладки в буфер обмена. После перетаскивания содержимого консоли отладки Edit - >Copy копирует только видимые части, а не весь выделенный фрагмент. Есть идеи, как скопировать весь выбор? Я также был.

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

Я хотел бы изучить содержимое переменной окружения во время отладки программы C++ в visual studio. Я много гуглил, но не нашел процедуры, чтобы сделать это. есть какие-нибудь советы о том, как я.

В Visual Studio Code можно ли скопировать выбранный код в буфер обмена с подсветкой синтаксиса? Я хочу иметь возможность вставлять в Word doc или электронную почту. Обычный Visual Studio делает это.

В режиме отладки Visual Studio можно навести курсор мыши на переменные, чтобы показать их значение, а затем щелкнуть правой кнопкой мыши на Copy, Copy Expression или Copy Value. В случае, если.

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

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

Мне нравится использовать Intellij. У него есть много замечательных функций, но мне также не нравится тот факт, что он автоматически копирует выделение в буфер обмена во время некоторых действий.

Я отлаживаю приложение Node.js в Visual Studio Code 1.0.0 и хочу скопировать все содержимое консоли отладки в буфер обмена. После перетаскивания содержимого консоли отладки Edit - >Copy копирует.

Я использую расширение Powershell для Visual Studio Code . Я обновил профиль: C:\пользователи\хххххххх\документы\WindowsPowerShell\Microsoft.VSCode_profile.ps1 Чтобы включить некоторые функции и.

При наведении указателя мыши на переменную в Visual Studio 2017 отображается имя типа. Как скопировать строку System.Collections.Generic.IEnumerable<IGrouping<FileType, IFileInfo>> в.

В Visual Studio Code во время отладки у вас есть представление переменных, которое показывает имя переменной и ее значение. Иногда значение усекается. Есть ли способ щелкнуть по значению и показать.

есть ли способ заставить Visual Studio скопировать выбранный код в буфер обмена как неформатированный текст?

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

Visual Studio помещает неформатированный текст в буфер обмена, но также помещает форматированный текст. (Буфер обмена поддерживает несколько одновременных форматов, и ОС предполагает, что они просто разные представления одних и тех же данных, хотя нет никакого технического обеспечения этой точки.)

приложение, которое вы используете для вставки, затем выбирает предпочтительный формат. В Word и, возможно, Outlook также есть команда" вставить специальный", которая позволяет выбрать формат вы хотите использовать.

мой отдел использует PureText. сидит в системном трее; скопируйте текст, нажмите-Это-полосы все форматирование, оставляя обычный текст ванили. Я уверен, что это очень похоже на PlainTextClipboard.

"PureText в основном эквивалентен открытие Блокнота, выполнение вставки, затем следует SELECT-ALL, а затем КОПИРОВАТЬ. Благо PureText является выполняя все эти действия с одиночный Горячий Ключ и иметь результат вставлено в ток окно автоматически."

стимулом для этого были flaky Lotus Notes; любит сбой при вставке HTML-маркированного текста, который я невинно скопировал с веб-страницы.

Если вы нажмете CTRL+Z после вставки, он обратится к не форматированию, потому что форматирование фактически считается одним шагом после обычной вставки.

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

если требуется, установите электрические инструменты урожайности

открыть Инструменты → Расширения и обновления

выберите Online (Галерея Visual Studio) и поиск производительности электроинструментов 2012/2013

Загрузите и перезапустите Visual Studio при появлении запроса

Производительность Настройки Электроинструментов

Открыть Инструменты → Параметры → Расширить Производительность Электроинструменты выберите HTML Copy

измените параметр BeforeCodeSnippet на:

изменить EmitSpanClass на:правда

Проверьте EmitSpanStyle: правда

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

в Outlook 2007 я изменил вставку по умолчанию только для текста. Перейти к опции редактора / дополнительно В разделе "вырезать, копировать, вставить" выберите вставка из других программ: [только текст]

и если вы все еще хотите вставить форматированный (реже в моем случае), используйте специальную вставку.

Расширение Visual Studio копировать в комментарий может быть удобно для вас. на самом деле, он не делает неформатированного копирования, но применяет свой собственный простой текстовый шаблон.

Он поддерживает формат "переполнения стека", который просто удаляет ведущие пробелы, сохраняя при этом отступ как можно больше, и вводит какой-то заголовок.

получить его от от Галерея Visual Studio и попробуйте из.

раскрытие: я являюсь автором этого расширения. Пожалуйста, notfiy меня, если я могу улучшить его для ваших нужд.

этот сайт Microsoft Office предлагает обходной путь, который включает в себя написание макроса для замены функций ctrl+v для вставки обычного текста все время, но это может быть не то, что вы хотите. Вы можете также переназначить неиспользуемый ярлык (ctrl+?) чтобы предоставить вам эту функцию, поэтому вам не нужно продолжать включать / отключать макрос.

для приложений, которые не имеют "вставить специальный" вы можете использовать приложение, как PureText

в доменном языке (DSL), созданном с помощью пакета SDK для визуализации и моделирования Visual Studio, можно изменить то, что происходит, когда пользователь копирует и вставит элементы.

Стандартное поведение копирования и вставки

Чтобы включить копирование, задайте свойство включить копирование вставки в узле Редактор в обозревателе DSL.

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

Внедренные элементы-потомки выбранных элементов (т. е. элементы, которые являются целевыми объектами отношений внедрения для копируемых элементов).

Связи отношений между скопированными элементами.

Это правило применяется к скопированным элементам и связям рекурсивно.

Скопированные и вставленные элементы

Скопированные элементы и связи сериализуются и сохраняются в ElementGroupPrototype (EGP), который размещается в буфере обмена.

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

Пользователь может вставить скопированные элементы в целевой объект, который может принять их в соответствии с определением DSL. Например, в DSL, созданном из шаблона решения компонентов, пользователь может вставить порты в компоненты, но не в схему, а также вставить компоненты в схему, но не в другие компоненты.

Настройка поведения копирования и вставки

Дополнительные сведения о настройке модели с помощью программного кода см. в разделе Навигация и обновление модели в программном коде.

Включение и отключение копирования, вырезания и вставки В обозревателе DSL установите свойство включить копирование вставки в узле Редактор .

Скопируйте связи в тот же целевой объект, например, чтобы скопировать поле для комментариев, связанное с тем же элементом темы. Задайте для свойства распространение копии роли значение распространить копию только для ссылки. Дополнительные сведения см. в разделе Настройка поведения копирования ссылок.

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

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

Выберите схему перед вставкой элементов, переопределив ClipboardCommandSet.ProcessOnPasteCommand() . Добавьте этот код в пользовательский файл в проекте DslPackage:

Создайте дополнительные связи, когда пользователь вставляет данные в выбранный целевой объект. Например, когда поле для комментариев вставляется в элемент, между ними создается связь. Добавьте директиву слияния элементов в целевой класс домена и настройте его на обработку слияния добавлением связей. Это будет также влиять на операции перетаскивания. Дополнительные сведения см. в разделе Настройка создания и перемещения элементов.

Переопределите ClipboardCommandSet.ProcessOnPasteCommand() для создания дополнительных связей после вызова базового метода.

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

Настройте способы копирования элементов в буфер обмена командой копирования, но не в операции перетаскивания. Переопределите мидсл ClipboardCommandSet.CopyModelElementsIntoElementGroupPrototype() в проекте DslPackage.

Сохраните макет фигуры через копирование и вставку. Если пользователь копирует несколько фигур, можно сделать так, чтобы при вставке их положение относительно друг друга сохранялось. Эта методика показана в примере в VMSDK: пример схем цепи.

Чтобы достигнуть такого эффекта, добавьте фигуры и соединители в скопированный ElementGroupPrototype. Самый удобный метод переопределения — это ElementOperations.CreateElementGroupPrototype(). Для этого добавьте в проект Dsl следующий код:

Вставьте фигуры в выбранное место, например в текущее положение указателя. Если пользователь копирует несколько фигур, можно сделать так, чтобы при вставке их положение относительно друг друга сохранялось. Эта методика показана в примере в VMSDK: пример схем цепи.

Для достижения такого эффекта переопределите ClipboardCommandSet.ProcessOnMenuPasteCommand() , чтобы использовать версию ElementOperations.Merge() , зависящую от местоположения. Для этого добавьте в проект DslPackage следующий код:

Позволяют пользователю перетаскивать элементы. См. раздел как добавить обработчик перетаскивания.

Настройка поведения копирования ссылок

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

Распространяет свойство копирования роли домена

Поддерживается три значения:

Не распространять копирование.

Распространить копирование только на связь: когда вставляется группа, новая копия этой связи ссылается на существующий элемент на другом конце связи.

Распространить копирование на исполнителя противоположной роли: скопированная группа включает копию элемента на другом конце связи.

Результат копирования с использованием PropagateCopyToLinkOnly

Сделанные изменения повлияют на элементы и скопированное изображение.

Программирование поведения копирования и вставки

Многие аспекты поведения DSL в отношении копирования, вставки, создания и удаления объектов управляются экземпляром, связанным ElementOperations с диаграммой. Поведение DSL можно изменить, создав собственный класс ElementOperations и переопределив ElementOperations свойство класса схемы.

Дополнительные сведения о настройке модели с помощью программного кода см. в разделе Навигация и обновление модели в программном коде.

Схема последовательностей для операции копирования

Схема последовательностей операции вставки

Определение собственного ElementOperations

В новом файле проекта доменного языка создайте класс, производный от класса DesignSurfaceElementOperations.

Добавьте определение разделяемого класса для класса схемы. Имя этого класса можно найти в дсл\женератедкоде\диаграмс.КС.

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

Добавьте этот код в пользовательский файл кода в проекте DslPackage:

Получение элементов, перетаскиваемых из других моделей

ElementOperations можно также использовать для определения поведения копирования, перемещения, удаления и перетаскивания. Для демонстрации использования ElementOperations в приведенном ниже примере определяется пользовательское поведение перетаскивания. Однако для этой цели можно рассмотреть альтернативный подход, описанный в разделе как добавить обработчик перетаскивания, который является более расширяемым.

Определите два метода в классе ElementOperations:

CanMerge(ModelElement targetElement, System.Windows.Forms.IDataObject data) Определяет, можно ли перетащить элемент источника на целевую фигуру, соединитель или схему.

MergeElementGroupPrototype(ModelElement targetElement, ElementGroupPrototype sourcePrototype) который объединяет исходный элемент в целевой объект.

CanMerge()

CanMerge() метод вызывается для определения отзывов, которые должны быть предоставлены пользователю при перемещении мыши по схеме. Для метода используются следующие параметры: элемент, на который наводится указатель мыши, и данные об источнике, из которого была выполнена операция перетаскивания. Пользователь может перетащить элемент из любого места экрана, поэтому исходный объект может быть разных типов и сериализован в разных форматах. Если источник является доменным языком или моделью UML, параметр данных является сериализацией ElementGroupPrototype. Операции перетаскивания, копирования и панели инструментов используют ElementGroupPrototypes для представления фрагментов моделей.

Прототип группы элементов может содержать любое количество элементов и связей. Типы элементов можно идентифицировать по их GUID. GUID принадлежит перетащенной фигуре, а не базовому элементу модели. В следующем примере CanMerge() возвращает значение true, если фигура класса из диаграммы UML перетаскивается в эту схему.

MergeElementGroupPrototype()

Этот метод вызывается, если пользователь вставляет элемент в схему, фигуру или соединитель. Он должен произвести слияние перетаскиваемого содержимого с целевым объектом. В этом примере код определяет, распознается ли комбинация типов цели и прототипа. Если да, то метод преобразует перетаскиваемые элементы в прототип элементов, которые должны быть добавлены к модели. Базовый метод вызывается для выполнения слияния преобразованных или не преобразованных элементов.

В этом примере обрабатываются элементы класса UML, перетаскиваемого из схемы класса UML. DSL не предусматривает прямое сохранение классов UML. Вместо этого создается элемент DSL для каждого перетаскиваемого класса UML. Это пригодится, если, например, доменный язык является схемой экземпляра. Пользователь может перетаскивать классы на схему, чтобы создать экземпляры этих классов.

Стандартное поведение копирования

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

Когда пользователь нажимает сочетание клавиш CTRL + C или применяет команду меню "Копировать", вызывается метод ProcessOnMenuCopyCommand. Вы можете увидеть, как это настроить в Дслпаккаже\женератед коде\коммандсет.КС. Дополнительные сведения о настройке команд см. в разделе инструкции. Добавление команды в контекстное меню.

Можно переопределить Процессонменукопикомманд, добавив определение разделяемого класса мидсл ClipboardCommandSet в проект DslPackage.

Каждая схема имеет единственный экземпляр ElementOperations. Можно указать свою собственную производную. Этот файл, который можно поместить в проект доменного языка, будет вести себя так же, как и код, который он переопределяет:

См. также

Компонент Text Template Transformation (Преобразование текстовых шаблонов) автоматически устанавливается как часть рабочей нагрузки разработки расширений Visual Studio. Его также можно установить на вкладке Отдельные компоненты Visual Studio Installer в категории Пакеты SDK, библиотеки и платформы. Установите компонент Пакет SDK для моделирования со вкладки Отдельные компоненты.

Читайте также: