UnboundHandler object
The control supports unbound mode. In unbound mode, the user is responsible for retrieving items. The unbound mode was provided to let user displays large number of items. In order to let the control works in unbound mode, the user has to implement the  IUnboundHandler notification interface. The UnboundHandler property specifies the control's unbound handler. Currently, the UnboundHandler / IUnboundHandler interface is available for /COM version only.

Here's the IDL definition of the IUnboundHandler interface:

[
    uuid(84B7F083-9CA4-4C28-A569-CD38DF32C987),
    pointer_default(unique) 
]
interface IUnboundHandler : IUnknown
{
    [propget, id(1), helpcontext(3001), helpstring("Gets the number of items.")] HRESULT ItemsCount( IDispatch* Source, [out, retval ] long* pVal );
    [id(2), helpcontext(3002), helpstring("The source requires an item.")] HRESULT ReadItem( long Index, IDispatch* Source, long ItemHandle );
}

Here's the IDL definition of the UnboundHandler interface ( this interface is available starting from the version 12.0 ):

[
    uuid(84B7F083-9CA4-4C28-A569-CD38DF32C988),
]
dispinterface UnboundHandler
{
    interface IUnboundHandler;
}

The following VB sample displays 20,000 items in unbound mode:

Implements EXCOMBOBOXLibCtl.IUnboundHandler

Private Sub Form_Load()
    With ComboBox1
        .BeginUpdate
        .Columns.Add("Index").FormatColumn = "value format `0`"
        Set .UnboundHandler = Me
        .EndUpdate
    End With
End Sub

Private Property Get IUnboundHandler_ItemsCount(ByVal Source As Object) As Long
    IUnboundHandler_ItemsCount = 20000
End Property

Private Sub IUnboundHandler_ReadItem(ByVal Index As Long, ByVal Source As Object, ByVal ItemHandle As Long)
    With Source.Items
        .CellCaption(ItemHandle, 0) = Index + 1
    End With
End Sub

The following VB/NET sample displays 20,000 items in unbound mode:

Public Class Form1
    Implements EXCOMBOBOXLib.IUnboundHandler

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With AxComboBox1
            .BeginUpdate()
            .Columns.Add("Index").FormatColumn = "value format `0`"
            .UnboundHandler = Me
            .EndUpdate()
        End With
    End Sub

    Public ReadOnly Property ItemsCount(ByVal Source As Object) As Integer Implements EXCOMBOBOXLib.IUnboundHandler.ItemsCount
        Get
            ItemsCount = 20000
        End Get
    End Property

    Public Sub ReadItem(ByVal Index As Integer, ByVal Source As Object, ByVal ItemHandle As Integer) Implements EXCOMBOBOXLib.IUnboundHandler.ReadItem
        With Source.Items
            .CellCaption(ItemHandle, 0) = Index + 1
        End With
    End Sub
End Class

The following C# sample displays 20,000 items in unbound mode:

public partial class Form1 : Form, EXCOMBOBOXLib.IUnboundHandler
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        axComboBox1.BeginUpdate();
        (axComboBox1.Columns.Add("Index") as EXCOMBOBOXLib.IColumn).FormatColumn = "value format `0`";
        axComboBox1.UnboundHandler = this;
        axComboBox1.EndUpdate();
    }

    public int get_ItemsCount(object Source)
    {
        return 1000000;
    }

    public void ReadItem(int Index, object Source, int ItemHandle)
    {
        (Source as EXCOMBOBOXLib.IComboBox).Items.set_CellCaption(ItemHandle, 0, Index + 1);
    }
}

The following VFP 9 sample displays 20,000 items in unbound mode:

with thisform.ComboBox1
	.Columns.Add("Index").FormatColumn = "value format `0`"
	.UnboundHandler = newobject('UnboundHandler', 'class1.prg')
endwith

where the class1.prg is:

define class UnboundHandler as session OLEPUBLIC

implements IUnboundHandler in "ExComboBox.dll"
function IUnboundHandler_get_ItemsCount(Source)	
	return 1000000
endfunc
function IUnboundHandler_ReadItem(Index, Source, ItemHandle)
	With Source.Items
        .CellCaption(ItemHandle, 0) = Index + 1 
    EndWith
endfunc

implements UnboundHandler in "ExComboBox.dll"
function UnboundHandler_get_ItemsCount(Source)	
	return this.IUnboundHandler_get_ItemsCount(Source)
endfunc
function UnboundHandler_ReadItem(Index, Source, ItemHandle)
	return this.IUnboundHandler_ReadItem(Index, Source, ItemHandle)
endfunc

enddefine

The following VFP 7 and VFP 8 sample displays 20,000 items in unbound mode:

with thisform.ComboBox1
	.Columns.Add("Index").FormatColumn = "value format `0`"
	.UnboundHandler = newobject('UnboundHandler', 'class1.prg')
endwith

where the class1.prg is:

define class UnboundHandler as custom

implements IUnboundHandler in "ExComboBox.dll"

function IUnboundHandler_get_ItemsCount(Source)	
	return 20000
endfunc

function IUnboundHandler_ReadItem(Index, Source, ItemHandle)
	With Source.Items
		.DefaultItem = ItemHandle
        .CellCaption(0, 0) = Index + 1
    EndWith
endfunc

enddefine 

 

The UnboundHandler / IUnboundHandler interface requires the following properties and methods:

NameDescription
ItemsCountGets the number of items.
ReadItemThe source requires an item.