Могу ли я иметь фрагмент кода в VS 2010, где замена заменяет несколько элементов - PullRequest
0 голосов
/ 06 сентября 2010

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

<asp:Label Text="$Name$" runat="server" AssociatedControlID="$txtName$" />
<asp:TextBox runat="server" ID="$txtName$" />
<br />

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

Есть ли способ обойти это?

Ответы [ 3 ]

1 голос
/ 06 сентября 2010

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

1 голос
/ 30 декабря 2010

интересный сценарий начинается, когда вы хотите создать фрагмент окружения с $ selected $ дважды. например, для создания фрагмента CheckArgumentForNull, чтобы проверить аргумент на нулевое значение, и в случае нулевого значения вызвать ArgumentNullException с именем параметра Только позже получил замену.

Есть идеи? Конечно, мы можем использовать только фрагмент расширения и ввести имя аргумента самостоятельно.

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
        <SnippetType>SurroundsWith</SnippetType>
      </SnippetTypes>
      <Title>notnull</Title>
      <Author>Viiar Consulting</Author>
      <Description>Code snippet for checking whether is argument null</Description>
      <HelpUrl>
      </HelpUrl>
      <Shortcut>notnull</Shortcut>
    </Header>
    <Snippet>
      <Imports>
        <Import>
          <Namespace>System</Namespace>
        </Import>
      </Imports>
      <Declarations>
        <Literal Editable="true">
          <ID>argument</ID>
          <ToolTip>
          </ToolTip>
          <Default>argument</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp"><![CDATA[if ($selected$ == null)
{
    throw new ArgumentNullException("$selected$");
}
$end$]]></Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
1 голос
/ 06 сентября 2010

Это должно работать и работает для меня.

Можете ли вы показать полный файл сниппета? Вот тот, который работает, type и fieldName заменяются несколько раз:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <Header>
        <Title>Non-automatically implemented property</Title>
        <Author>Richard Cox</Author>
        <Shortcut>propf</Shortcut>
        <Description>Property with exlicit field</Description>
        <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
        </SnippetTypes>
    </Header>
    <Snippet>
        <Declarations>
            <Literal>
                <ID>propName</ID>
                <ToolTip>Property Name</ToolTip>
                <Default>Name</Default>
            </Literal>
            <Literal>
                <ID>fieldName</ID>
                <ToolTip>Field Name</ToolTip>
                <Default>field</Default>
            </Literal>
            <Literal>
                <ID>type</ID>
                <ToolTip>Property type</ToolTip>
                <Default>string</Default>
            </Literal>
        </Declarations>
        <Code Language="csharp">
            <![CDATA[private $type$ $fieldName$;
    public $type$ $propName$ {
        get { return $fieldName$;}
        set { $fieldName$ = value;}
    }

    $end$]]>
        </Code>
    </Snippet>
</CodeSnippet>
...