2010-07-30 5 views
2

У меня есть этот изящный небольшой кусок кода здесь, что само-propogates бесконечности каждый раз, когда соответствующий метод называется:Использование свойств объектов в ListBox

if (this.ListBox_MyListBox.Items[e.Index] is MyObject) 
        { 
         MyObject epicObject= new MyObject(); 
         epicObject= (MyObject)this.ListBox_MyListBox.Items[e.Index]; 
         epicObject.Name = epicObject.Name + " (label)"; 

Указанный способ является событие щелчка , и, к сожалению, каждый раз, когда я нажимаю, он добавляет еще одну «(метку)» в конец строки имени.

В другом месте, у меня очень похожая ситуация, которая не нуждается в слепок

if (this.ListBox_MyListBox.Items[e.Index] is String) 
        { 
    string tag = (string)this.ListBox_SmartSetOptions.Items[e.Index]+ " (tag)"; 

и что код работает отлично.

Я думал, что объявление нового объекта каждый раз позволит избежать бесконечного повторения, но его все еще происходит. Что мне не хватает?

ответ

3

Если вы только хотите добавить " (label)" один раз, вы можете сделать что-то вроде этого:

if (!epicObject.Name.EndsWith(" (label)")) 
{ 
    epicObject.Name += " (label)"; 
} 

Это то, что вы пытаетесь сделать?

Когда вы добавляете " (label)" к .Name собственности, .Name собственность заменяется новой строки, который вы создаете с " (label)" в конце.

+0

+1, да, я думал об этом сам, но надеялся сделать это таким образом, чтобы избежать разбора свойства имени каждый раз. –

0

Этот код выглядит очень странно для меня, я думаю, что вы пытаетесь сделать что-то больше похоже на

if (this.ListBox_MyListBox.Items[e.Index] is MyObject) 
       { 
        epicObject.Name = ((MyObject)this.ListBox_MyListBox.Items[e.Index]).Name + " (label)"; 

Причина вы получаете придаток в ListBox происходит потому, что вы установили epicObject к элементу в ListBox, который на самом деле делает ссылку на объект, а затем изменяет свойство Name в epicObject, изменяет свойство имени того, что он ссылается, - элемент в ListBox. Код, указанный выше, просто устанавливает ваше имя epicObject.name в выбранное имя + "(label)"; не изменяя элемент списка.

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