In addition to the existing methods, could you add some variations that use the assocaited data value? GetItemByData(), RemoveItemByData(), SelectItemByData().
IMHO, that is the only user-defined identifier that is guaranteed to stay constant, since it depends on the user (names can be duplicated, indexes change when sorting, etc.).
Other nice-to-have options would be SelectAllItems() or InvertSelection(), for multi-selection lists.
How is Control.GetItemByData() supposed to work? Is it the same as Control.GetItemAt() (expects an int)?
I did a quick test, but I can't get it to work. Proof.