次の方法で共有


CodeAttribute2.AddArgument メソッド

属性に引数を追加します。

名前空間:  EnvDTE80
アセンブリ:  EnvDTE80 (EnvDTE80.dll 内)

構文

'宣言
Function AddArgument ( _
    Value As String, _
    Name As Object, _
    Position As Object _
) As CodeAttributeArgument
CodeAttributeArgument AddArgument(
    string Value,
    Object Name,
    Object Position
)
CodeAttributeArgument^ AddArgument(
    String^ Value, 
    [InAttribute] Object^ Name, 
    [InAttribute] Object^ Position
)
abstract AddArgument : 
        Value:string * 
        Name:Object * 
        Position:Object -> CodeAttributeArgument
function AddArgument(
    Value : String, 
    Name : Object, 
    Position : Object
) : CodeAttributeArgument

パラメーター

  • Value
    型 : String

    必須。 既定値は 0 です。ここで指定した要素の後に、新しい要素を追加します。 値が CodeElement の場合は、CodeElement 引数の後に新しい要素が追加されます。値が Long データ型の場合、後ろに新しい要素を追加する要素が示されます。 コレクションのインデックス番号は 1 から始まるため、ゼロを指定すると、新しい要素がコレクションの先頭に配置されます。 値が -1 の場合は、引数を末尾に配置することを示します。

  • Name
    型 : Object

    必須。 引数の値。

  • Position
    型 : Object

    省略可能。 引数が名前付きパラメーターの場合、このパラメーターには、引数の名前が含まれます。

戻り値

型 : EnvDTE80.CodeAttributeArgument
CodeAttributeArgument オブジェクト。

解説

注意

Visual Studio では、割り当てられたコード属性引数はメモリに保持されないため、将来、コード属性引数の更新が発生したときに有効でないこともあります。つまり、それ以降、引数にアクセスした場合に、E_FAIL や、まったく異なる値が返される可能性があります。ただし、要素の子に影響を及ぼす引数については、この問題はありません。

このように、引数の値が非確定的なため、値は変更する前に取得します。たとえば、myAttrArg.Value = """a first value""" などのコード属性引数をコードに設定した場合は、更新前に、そのコード属性引数を明示的に参照 (myAttrArg = myAttr.Arguments.Item("first value")) してから、新しい値を割り当てます (myAttrArg.Value = """a second value""")。これによって、正確な引数を変更できます。

また、特定の種類の編集を行うと、クラス、構造体、関数、属性、デリゲートなどのコード モデル要素が非確定的な値になる場合があります。つまり、これらの要素の値は、常に同じ値になるとは限りません。詳細については、「コード モデルを使用したコードの調査 (Visual Basic)」で、コード モデル要素値を変更する方法についての説明を参照してください。

新しい名前空間および属性を現在のクラスに作成し、属性のプロパティの一部を一覧表示する例を次に示します。

public void CreateClassAndAttrib(DTE2 applicationObject)
{
    // Before running, load or create a project.
    FileCodeModel2 fcm2 = GetFileCodeModel(applicationObject);
    CodeAttribute2 cmAttribute;
    CodeClass2 cmClass;
    String msg = null;

    if (fcm2 != null)
    {
        CodeNamespace cmNamespace;
        // Try to create a new namespace.
        try
        {
            cmNamespace = fcm2.AddNamespace("CMNamespace", -1);
            // If successful, create the other code elements.
            if (cmNamespace != null)
            {
                cmClass = (CodeClass2)cmNamespace.AddClass("ANewClass", 
                -1, null, null, vsCMAccess.vsCMAccessPrivate);
                cmAttribute = (CodeAttribute2)cmClass.AddAttribute
                ("NewAttribute", "AttributeValue", -1);
                msg += "# of Arguments: " + cmAttribute.Arguments.Count 
                + Environment.NewLine;
                MessageBox.Show(msg);
                cmAttribute.AddArgument("NewAddedValue", null, null);
                msg += "# of Arguments: " + cmAttribute.Arguments.Count 
                + Environment.NewLine;
                MessageBox.Show(msg);                       
            }
            else
            {
                MessageBox.Show("Cannot continue - no filecodemodel 
                available.");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("ERROR: " + ex);
        }
    }
}

public FileCodeModel2 GetFileCodeModel(DTE2 applicationObject)
{
    // Returns the FileCodeModel object of the active 
    // window.
    TextWindow txtWin = 
    (TextWindow)applicationObject.ActiveWindow.Object;
    FileCodeModel2 fcm2;
    if (txtWin != null)
    {
        try
        {
             fcm2 = (FileCodeModel2)txtWin.Parent.
             ProjectItem.FileCodeModel;
             return fcm2;
        }
        catch (Exception ex)
        {
             MessageBox.Show("ERROR: " + ex);
             return null;
        }
    }
    else
        return null;
}

.NET Framework セキュリティ

  • 直前の呼び出し元に対する完全な信頼。このメンバーは、部分的に信頼されているコードから使用することはできません。詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

参照

関連項目

CodeAttribute2 インターフェイス

EnvDTE80 名前空間

その他の技術情報

方法 : オートメーション オブジェクト モデルのコード例をコンパイルおよび実行する

コード モデルを使用したコードの調査 (Visual Basic)

コード モデルを使用したコードの調査 (Visual C#)