## ArgumentCollection.AddWithHandler

### Introduced

v4.0

### Description

Appends an argument with an ArgumentHandler.

### C# Syntax

    Argument ArgumentCollection.AddWithHandler( String in_ArgumentName, Object in_ArgHandler, String in_DefaultValue );

### Scripting Syntax

    oReturn = ArgumentCollection.AddWithHandler( ArgumentName, ArgumentHandler, [DefaultValue] );

### Return Value

Argument

### Parameters

Parameter | Type | Description
--- | --- | ---
ArgumentName | String | Name of the new argument to append
ArgumentHandler | siArgumentHandler | Name of the argument handler to use.
DefaultValue | String | Normally Argument Handlers do not require a default value, but some adjust their behavior if a string is provided. For example if the string "*" is provided in conjunction with the "Collection" Argument Handler then all the objects in the scene are sent to the command rather than the current selection. This behavior is documented with the siArgumentHandler enum.

### Examples

#### JScript Example

    // JScript example: Add argument handler that gets the current selection
    // Remove existing command
    Application.RemoveCommand("MyCommand");
    // Create a command named "MyCommand". You must create the file and paste
    // the "MyCommandFunc" function in the file to get the example to work
    var oCmd = Application.CreateCommand("MyCommand");
    // Outputs all element that are currently selected
    function MyCommandFunc( in_CurrentSelection )
    {
                    Logmessage( "MyCommandFunc was called with the following arguments: " ) ;
                    for (i = 0; i < in_CurrentSelection.Count; i++ )
                    {
                            var currentItem = in_CurrentSelection(i);
                            LogMessage( currentItem.Name );
                    }
    }
    // Set the handler code (this is an embedded command)
    oCmd.Code = MyCommandFunc.toString() ;
    oCmd.Language = "Jscript" ;
    // Function implementing the handling code (see MyCommandFunc for the actual function code)
    oCmd.Handler = "MyCommandFunc";
    // Adds an argument handler that gets the currently selected objects
    // when the user does not specify the argument value when invoking the
    // command.
    var oCmdArguments = oCmd.Arguments
    var noValue;
    oCmdArguments.AddWithHandler
    (
                    "CurrentSelection",                     // name of the new argument
                    "Collection",                           // name of the argument handler to use
                    noValue                                 // parameter to the argument handlers (stored in Argument.Value)
    );
    // Register the new command
    Application.AddCommand(oCmd);
    SelectObj( "light" ) ;
    // Call the updated command.  The "CurrentSelection" argument
    // will contain the current selection.
    oCmd.Execute();
    // You can override the behavior by passing specific object
    oCmd.Arguments(0).Value = "Camera_Root" ;
    oCmd.Execute() ;
    // Remove the command
    Application.RemoveCommand("MyCommand");
    // Expected results:
    //INFO : "MyCommandFunc was called with the following arguments: "
    //INFO : "light"
    //INFO : "MyCommandFunc was called with the following arguments: "
    //INFO : "Camera_Root"

### See Also

ArgumentHandler ArgumentCollection.Add Command.Arguments