

| Type | Description | |||
| Object as Object | An object created by UserEditor property. | |||
| Ev as OleEvent | An OleEvent object that holds information about the event | |||
| CloseEditor as Boolean | (By Reference) A boolean expression that indicates whether the control should close the user editor. | |||
| Node as Node | A Node object where the ActiveX editor is opened. | 
		private void UserEditorOleEvent(object sender,object Obj,exontrol.EXMLGRIDLib.OleEvent Ev,ref bool CloseEditor,exontrol.EXMLGRIDLib.Node Node)
{
}
		Private Sub UserEditorOleEvent(ByVal sender As System.Object,ByVal Obj As Object,ByVal Ev As exontrol.EXMLGRIDLib.OleEvent,ByRef CloseEditor As Boolean,ByVal Node As exontrol.EXMLGRIDLib.Node) Handles UserEditorOleEvent End Sub  | 
		private void UserEditorOleEvent(object sender, AxEXMLGRIDLib._IXMLGridEvents_UserEditorOleEventEvent e)
{
}
		void OnUserEditorOleEvent(LPDISPATCH Object,LPDISPATCH Ev,BOOL FAR* CloseEditor,LPDISPATCH Node)
{
}
		void __fastcall UserEditorOleEvent(TObject *Sender,IDispatch *Object,Exmlgridlib_tlb::IOleEvent *Ev,VARIANT_BOOL * CloseEditor,Exmlgridlib_tlb::INode *Node)
{
}
		procedure UserEditorOleEvent(ASender: TObject; Object : IDispatch;Ev : IOleEvent;var CloseEditor : WordBool;Node : INode); begin end; procedure UserEditorOleEvent(sender: System.Object; e: AxEXMLGRIDLib._IXMLGridEvents_UserEditorOleEventEvent); begin end; begin event UserEditorOleEvent(oleobject Object,oleobject Ev,boolean CloseEditor,oleobject Node) end event UserEditorOleEvent Private Sub UserEditorOleEvent(ByVal sender As System.Object, ByVal e As AxEXMLGRIDLib._IXMLGridEvents_UserEditorOleEventEvent) Handles UserEditorOleEvent End Sub Private Sub UserEditorOleEvent(ByVal Object As Object,ByVal Ev As EXMLGRIDLibCtl.IOleEvent,CloseEditor As Boolean,ByVal Node As EXMLGRIDLibCtl.INode) End Sub Private Sub UserEditorOleEvent(ByVal Object As Object,ByVal Ev As Object,CloseEditor As Boolean,ByVal Node As Object) End Sub LPARAMETERS Object,Ev,CloseEditor,Node PROCEDURE OnUserEditorOleEvent(oXMLGrid,Object,Ev,CloseEditor,Node) RETURN  | 
		<SCRIPT EVENT="UserEditorOleEvent(Object,Ev,CloseEditor,Node)" LANGUAGE="JScript"> </SCRIPT> <SCRIPT LANGUAGE="VBScript"> Function UserEditorOleEvent(Object,Ev,CloseEditor,Node) End Function </SCRIPT> Procedure OnComUserEditorOleEvent Variant llObject Variant llEv Boolean llCloseEditor Variant llNode Forward Send OnComUserEditorOleEvent llObject llEv llCloseEditor llNode End_Procedure METHOD OCX_UserEditorOleEvent(Object,Ev,CloseEditor,Node) CLASS MainDialog RETURN NIL void onEvent_UserEditorOleEvent(COM _Object,COM _Ev,COMVariant /*bool*/ _CloseEditor,COM _Node)
{
}
		function UserEditorOleEvent as v (Object as P,Ev as OLE::Exontrol.XMLGrid.1::IOleEvent,CloseEditor as L,Node as OLE::Exontrol.XMLGrid.1::INode) end function function nativeObject_UserEditorOleEvent(Object,Ev,CloseEditor,Node) return  | 
The following VB sample closes the Exontrol's ExComboBox user editor when the user selects a new value, or when it presses the Escape key. Also the sample changes the value of the node in the ExComboBox control:
Private Sub XMLGrid1_UserEditorOleEvent(ByVal Object As Object, ByVal Ev As EXMLGRIDLibCtl.IOleEvent, CloseEditor As Boolean, ByVal Node As EXMLGRIDLibCtl.INode)
    If (Ev.Name = "Change") Then
        Node.Value = Object.Select(0)
        CloseEditor = True
    End If
    
    If (Ev.Name = "KeyPress") Then
        Dim l As Long
        l = Ev(0).Value
        If l = vbKeyEscape Then
            CloseEditor = True
        End If
    End If
End Sub
  the sample requires an ActiveX editor ( in our case the Exontrol's ExComboBox control ):
With XMLGrid1.Editors
    With .Add("excombobox", UserEditorType)
        .UserEditor "Exontrol.ComboBox", ""
        With .UserEditorObject
            .BeginUpdate
            .LabelHeight = XMLGrid1.NodeHeight - 3
            .LinesAtRoot = True
            .HeightList = 256
            .WidthList = 256
            .IntegralHeight = True
            .Columns.Add ("Name")
            .Columns.Add ("Value")
            .ColumnAutoResize = True
            With .Items
                Dim h As Long, h1 As Long
                h = .AddItem("Item 1")
                .CellCaption(h, 1) = "Item 1.2"
                h1 = .InsertItem(h, , "SubItem 1")
                .CellCaption(h1, 1) = "SubItem 1.2"
                h1 = .InsertItem(h, , "SubItem 2")
                .CellCaption(h1, 1) = "SubItem 2.2"
                .ExpandItem(h) = True
            End With
            .EndUpdate
        End With
    End With
End With
  The following C++ sample closes the Exontrol's ExComboBox user editor when the user selects a new value, or when it presses the Escape key. Also the sample changes the value of the node in the ExComboBox control:
#import <exmlgrid.dll>
#import <excombobox.dll>
void OnUserEditorOleEventXmlgrid1(LPDISPATCH Object, LPDISPATCH Ev, BOOL FAR* CloseEditor, LPDISPATCH Node) 
{
	EXMLGRIDLib::IOleEventPtr spEvent = Ev;
	EXCOMBOBOXLib::IComboBoxPtr spComboBox = Object;
	if ( spComboBox != NULL )
		if ( spEvent != NULL  )
		{
			if ( spEvent->Name.operator ==( "Change" ) )
			{
				CNode node( Node );
				node.SetValue( spComboBox->GetSelect( COleVariant( (long)0 ) ) );
				*CloseEditor = TRUE;
			}
			else
				if ( spEvent->Name.operator ==( "KeyPress" ) )
				{
					// gets the KeyCode parameter
					EXMLGRIDLib::IOleEventParamPtr spParam;
					if ( SUCCEEDED( spEvent->get_Param( COleVariant( (long)0 ), &spParam ) ) )
					{
						COleVariant vtI4;
						vtI4.ChangeType( VT_I4, &spParam->Value );
						if ( V_I4( &vtI4) == VK_ESCAPE )
							*CloseEditor = TRUE;
					}
				}
		}
}
  the sample requires an ActiveX editor ( in our case the Exontrol's ExComboBox control ), so we need to call the #import <excombobox.dll> in order to include definitions for objects and types in the ExComboBox control. The #import <excombobox.dll> creates EXCOMBOBOXLib namespace that includes all definitions for objects and types that the ExComboBox control exports.
#include "Editor.h"
#include "Editors.h"
COleVariant vtMissing; V_VT( &vtMissing ) = VT_ERROR;
CEditors editors = m_xmlgrid.GetEditors();
CEditor editor = editors.Add( COleVariant( "excombobox" ), 16 /*UserEditorType*/ );
editor.UserEditor( "Exontrol.ComboBox", "" );
EXCOMBOBOXLib::IComboBoxPtr spComboBox = editor.GetUserEditorObject();
if ( spComboBox != NULL )
{
	spComboBox->BeginUpdate();
	spComboBox->LabelHeight = m_xmlgrid.GetNodeHeight() - 3;
	spComboBox->LinesAtRoot = EXCOMBOBOXLib::exLinesAtRoot;
	spComboBox->put_HeightList( vtMissing, 256 );
	spComboBox->put_WidthList( vtMissing, 256 );
	spComboBox->IntegralHeight = true;
	spComboBox->Columns->Add("Name");
	spComboBox->Columns->Add("Value");
	spComboBox->ColumnAutoResize = true;
	EXCOMBOBOXLib::IItemsPtr spItems = spComboBox->Items;
	long h = spItems->AddItem(COleVariant( "Item 1" ));
	spItems->put_CellCaption(COleVariant(h),COleVariant((long)1), COleVariant( "Item 1.2" ) );
	long h1 = spItems->InsertItem(h, vtMissing, COleVariant( "SubItem 1") );
	spItems->put_CellCaption(COleVariant(h1),COleVariant((long)1), COleVariant( "SubItem 1.2" ) );
	h1 = spItems->InsertItem(h, vtMissing, COleVariant( "SubItem 2") );
	spItems->put_CellCaption(COleVariant(h1),COleVariant((long)1), COleVariant( "SubItem 2.2" ) );
	spItems->put_ExpandItem(h, true );
	spComboBox->EndUpdate();
}
  The following VB.NET sample closes the Exontrol's ExComboBox user editor when the user selects a new value, or when it presses the Escape key. Also the sample changes the value of the node in the ExComboBox control:
Private Sub AxXMLGrid1_UserEditorOleEvent(ByVal sender As Object, ByVal e As AxEXMLGRIDLib._IXMLGridEvents_UserEditorOleEventEvent) Handles AxXMLGrid1.UserEditorOleEvent
    If (e.ev.Name = "Change") Then
        e.node.Value = e.object.Select(0)
        e.closeEditor = True
    End If
    If (e.ev.Name = "KeyPress") Then
        Dim l As Integer = e.ev(0).Value
        If l = Keys.Escape Then
            e.closeEditor = True
        End If
    End If
End Sub
  the sample requires an ActiveX editor ( in our case the Exontrol's ExComboBox control ):
With AxXMLGrid1.Editors
    With .Add("excombobox", EXMLGRIDLib.EditTypeEnum.UserEditorType)
        .UserEditor("Exontrol.ComboBox", "")
        With .UserEditorObject
            .BeginUpdate()
            .LabelHeight = AxXMLGrid1.NodeHeight - 3
            .LinesAtRoot = True
            .HeightList = 256
            .WidthList = 256
            .IntegralHeight = True
            .Columns.Add("Name")
            .Columns.Add("Value")
            .ColumnAutoResize = True
            With .Items
                Dim h, h1 As Integer
                h = .AddItem("Item 1")
                .CellCaption(h, 1) = "Item 1.2"
                h1 = .InsertItem(h, , "SubItem 1")
                .CellCaption(h1, 1) = "SubItem 1.2"
                h1 = .InsertItem(h, , "SubItem 2")
                .CellCaption(h1, 1) = "SubItem 2.2"
                .ExpandItem(h) = True
            End With
            .EndUpdate()
        End With
    End With
End With
  The following C# sample closes the Exontrol's ExComboBox user editor when the user selects a new value, or when it presses the Escape key. Also the sample changes the value of the node in the ExComboBox control:
private void axXMLGrid1_UserEditorOleEvent(object sender, AxEXMLGRIDLib._IXMLGridEvents_UserEditorOleEventEvent e)
{
	if (e.ev.Name == "Change")
	{
		EXCOMBOBOXLib.ComboBox comboBox = e.@object as EXCOMBOBOXLib.ComboBox;
		if ( comboBox != null )
			e.node.Value = comboBox.get_Select(0);
		e.closeEditor = true;
	}
	else
		if (e.ev.Name == "KeyPress")
		{
			if (Convert.ToInt16(e.ev[0].Value) == Convert.ToInt16(Keys.Escape))
				e.closeEditor = true;
		}
}
  the sample requires an ActiveX editor ( in our case the Exontrol's ExComboBox control ):
EXMLGRIDLib.Editor editor = axXMLGrid1.Editors.Add("excombobox", EXMLGRIDLib.EditTypeEnum.UserEditorType);
editor.UserEditor("Exontrol.ComboBox", "");
EXCOMBOBOXLib.ComboBox comboBox = editor.UserEditorObject as EXCOMBOBOXLib.ComboBox;
if ( comboBox != null )
{
	comboBox.BeginUpdate();
	comboBox.LabelHeight = axXMLGrid1.NodeHeight - 3;
	comboBox.LinesAtRoot = EXCOMBOBOXLib.LinesAtRootEnum.exLinesAtRoot ;
	comboBox.set_HeightList( null, 256 );
	comboBox.set_WidthList( null, 256 );
	comboBox.IntegralHeight = true;
	comboBox.Columns.Add("Name");
	comboBox.Columns.Add("Value");
	comboBox.ColumnAutoResize = true;
	EXCOMBOBOXLib.Items items = comboBox.Items;
    int h = items.AddItem("Item 1");
	items.set_CellCaption(h, 1, "Item 1.2" );
	int h1 = items.InsertItem(h, null, "SubItem 1");
	items.set_CellCaption(h1, 1,"SubItem 1.2");
	h1 = items.InsertItem(h, null, "SubItem 2");
	items.set_CellCaption(h1, 1,"SubItem 2.2");
	items.set_ExpandItem(h, true);
    comboBox.EndUpdate();
}
In C# your project needs a new reference to the Exontrol's ExComboBox control library. Use the Project\Add Reference\COM item to add new reference to a COM object. Once that you added a reference to the Exontrol's ExComboBox the EXCOMBOBOXLib namespace is created. The EXCOMBOBOXLib namespace contains definitions for all objects that ExComboBox control exports.
The following VFP sample closes the Exontrol's ExComboBox user editor when the user selects a new value, or when it presses the Escape key. Also the sample changes the value of the node in the ExComboBox control:
*** ActiveX Control Event ***
LPARAMETERS object, ev, closeeditor, node
If (ev.Name = "Change") Then
    node.Value = object.Select(0)
    closeeditor = .t.
else
	If (ev.Name = "KeyPress") Then
	    local l
	    l = Ev(0).Value
	    If l = 27 Then
	        closeeditor = .t.
	    EndIf
	EndIf
EndIf
  the sample requires an ActiveX editor ( in our case the Exontrol's ExComboBox control ):
With thisform.XMLGrid1.Editors
    With .Add("excombobox", 16) && UserEditorType
        .UserEditor("Exontrol.ComboBox", "")
        With .UserEditorObject
            .BeginUpdate
            .LabelHeight = thisform.XMLGrid1.NodeHeight - 3
            .LinesAtRoot = -1
            .HeightList(0) = 256
            .WidthList(0) =256
            .IntegralHeight = .t.
            .Columns.Add ("Name")
            .Columns.Add ("Value")
            .ColumnAutoResize = .t.
            With .Items
                .DefaultItem = .AddItem("Item 1")
                h = .DefaultItem
                .CellCaption(0, 1) = "Item 1.2"
                .DefaultItem = .InsertItem(h, , "SubItem 1")
                .CellCaption(0, 1) = "SubItem 1.2"
				.DefaultItem = .InsertItem(h, , "SubItem 2")
                .CellCaption(0, 1) = "SubItem 2.2"
                .DefaultItem = h
                .ExpandItem(0) = .t.
            EndWith
            .EndUpdate
        EndWith
    EndWith
EndWith