2012-03-22 2 views
0

Вы бы так не подумали, но это происходит, когда список связан с источником данных (насколько я могу видеть).следует изменить родительский элемент списка, чтобы изменить выбранный индекс?

Я уменьшил поведение до кода ниже. Строка «if» переключается между загрузкой списка через привязку данных и загрузкой списка «вручную» (оба используют одну и ту же таблицу данных). В каждом случае я устанавливаю выбранный индекс позже, а затем изменяю родительскую форму. При ручной загрузке выбранный индекс сохраняется, а привязка теряется. Я не вижу, как это имеет смысл - я не понимаю, почему изменение формы хоста должно изменить любое свойство списка. Это ошибка?

Public Class Form1 
    Sub main() Handles Me.Load 
     Dim ListControl1 As ListBox = New ListBox 
     ListControl1.Parent = Me 
     Dim dt = New DataTable 
     dt.Columns.Add("intColourID") 
     dt.Columns.Add("strName") 
     dt.Rows.Add({1, "Red"}) 
     dt.Rows.Add({2, "Green"}) 
     dt.Rows.Add({3, "Blue"}) 

     ListControl1.ValueMember = dt.Columns(0).ColumnName 
     ListControl1.DisplayMember = dt.Columns(1).ColumnName 
     If False Then 
      ListControl1.DataSource = dt 
     Else 
      For i = 0 To dt.Rows.Count - 1 
       ListControl1.Items.Add(dt.Rows(i)("strName").ToString) 
      Next 
     End If 
     ListControl1.SelectedIndex = 2 
     Dim z As Form = New Form 
     ListControl1.Parent = z 
     z.Show() 
    End Sub 
End Class 
+0

Ты работаешь на Microsoft? Они думают, что знают, что я хочу делать или должны делать лучше, чем я. – DJDave

+0

Я могу переформулировать проблему, чтобы не требовалось менять родителя. Выделите первую строку .parent = и последние три строки (dim z как форма и т. Д.). Почему список, привязанный к данным, выдает ошибку, когда выбран selectedindex, а ручной - нет? – DJDave

+0

Может быть, это не имеет смысла, но меняет ли родитель смысл? (заменяет и исправляет мой предыдущий комментарий) –

ответ

0

Правильный способ добавления элемента управления в форме не установить его родителей, но, чтобы добавить его к Controls коллекции формы. Если я делаю это так, я не получаю исключение (три последние строки прокомментированы, когда вы пишете в своем комментарии).

Me.Controls.Add(ListControl1) ' Instead of ListControl1.Parent = Me 
+0

Благодарим за предложение. Я думал, что эти два утверждения эквивалентны, но это было всего лишь предположением. Тем не менее, по-прежнему возникает проблема: если вы закомментируете первую .parent = строку (не заменяете ее на me.controls.add), по-прежнему возникает ошибка при настройке выбранного индекса в списке данных, но не в «руководстве ". Почему список должен быть членом коллекции элементов управления для того, чтобы selectedindex работал для списка данных, но не для списка с ручным заполнением? – DJDave

+0

В отладчике я увидел, что коллекция 'Items'' ListBox' не была заполнена при использовании списка привязки данных с 'ListBox', не привязанным к форме. Я не знаю почему; это именно то, как оно реализовано. Мир не совершенен. –

+0

Спасибо, что подтвердили это. Цените свое время. Теперь я знаю, что делает Listbox и не делает в этих обстоятельствах, я буду соответствующим образом закодировать. – DJDave

Смежные вопросы