c# - TabPageCollection.RemoveByKey index 0 out of range -
so i've got weird issue. i'm developing chat application using jabber framework. i'm trying remove tabpage tabcontrol (removing chat tab chat window). each tabpage keyed string of user's jid (user@server.com). whenever try remove tabpage key, argumentoutofrangeexception. below code have explicitly removing chat tab. have function listens closing event of form itself, removes first (and only) control each tabpage before allowing form close.
the weird part code works fine when chat form hasn't been closed. each chat tab can explicitly removed using function. problem arises when go remove tab after form has been closed , reopened (with current-open chats being re-added in own tabs).
some key things know:
- i can retrieve index of tabpage want close through
chattabs.tabpages.indexofkey(...) - i can retrieve tabpage object through
chattabs.tabpages[...]using index valueindexofkey(...) - when try remove page passing value
chattabs.tabpages[...]chattabs.tabpages.remove(...), nothing happens - when try close form in
catchblock, nothing happens, , form stays open
clearly weird issue, , i've run out of ways debug it. ideas so?
removechat(...) function:
private void removechat(jid userjid) { if (chattabs.tabpages.containskey(userjid.bare)) { try { // remove chat tab if (chattabs.tabpages[userjid.bare].controls.count > 0) { chattabs.tabpages[userjid.bare].controls.removeat(0); } chattabs.tabpages.removebykey(userjid.bare); } catch (exception ex) { log.error(ex.message + "\r\n" + ex.stacktrace); this.close(); return; } // select first available chat tab if (chattabs.tabcount > 0) { chattabs.selectedindex = 0; } // close chat window else { this.close(); } } } form closing listener/handler function:
private void chatform_formclosing(object sender, formclosingeventargs e) { // remove each chat control not disposed foreach (tabpage tab in chattabs.tabpages) { tab.controls.removeat(0); } } error removebykey(...):
2013-03-01 12:39:42,963: error <10> [chatform] - index 0 out of range. parameter name: index @ system.windows.forms.control.controlcollection.get_item(int32 index) @ system.windows.forms.tabcontrol.tabpagecollection.removebykey(string key) @ <...>.chatform.removechat(jid userjid) in c:\work\[...]\chatform.cs:line 87 where line 87 call removebykey(...)
Comments
Post a Comment