Последний выбранный индекс находится вне диапазона, потому что вы используете предварительное увеличение. Это означает, что перед тестом я становлюсь dp1.length, и он также назначается для selectedIndex. Это может объяснить странное поведение. Возможно, вы захотите использовать постинкремент.
Также. Единственное, что исполняется в это время, выглядит как
cmb.selectedIndex = ++i;
Я не знаю, если это то, что вы хотели, но вам может понадобиться "{}" там.