获得当前MSN帐号的所有联系人及联系人组,并将这些信息加载到TreeView控件的功能由UpdateContactlist方法完成,该方法在Windows_Unloaded事件被调用。UpdateContactlist方法的代码如下:
private void UpdateContactlist()
{
// 使用Messenger类ContactList属性获得当前MSN帐号中所有的联系人,
// 并依次处理这些联系人
foreach (Contact contact in im.messenger.ContactList.All)
{
// 处理每一个联系人
addContactAndGroup(contact);
}
}
在UpdateContactList方法中涉及到一个addContactAndGroup方法。该方法负责处理每一个联系人,代码如下:
private void addContactAndGroup(Contact contact)
{
ItemObject itemObject = null;
// 根据当前联系人是否在线,选择相应的图标文件
String iconUri = (contact.Status == PresenceStatus.Offline) ?
"images/logo_gray.ico" : "images/logo.ico";
// 如果当前联系人所属性组中已经有其他的好友,
// 则当前联系人会找到相应的联系人组
foreach (TreeViewItem tvGroupItem in tvContactList.Items)
{
String groupName = ((ItemObject)tvGroupItem.Tag).contactGroup.Name;
if (groupName.Equals(contact.ContactGroup.Name))
{
// 创建一个TreeViewIconsItem对象
TreeViewIconsItem tvItem = new TreeViewIconsItem();
// 为当前联系人添加一个图标
tvItem.Icon = CreateImage(iconUri);
itemObject = new ItemObject();
itemObject.contact = contact;
// 设置联系人节点名
tvItem.HeaderText = contact.Name;
tvItem.Tag = itemObject;
// 添加联系人
tvGroupItem.Items.Add(tvItem);
return;
}
}
// 当前联系人所有的组中暂时没有其他的好友,
// 则创建一个新的联系人组节点和一个联系人节点
TreeViewIconsItem tvNewGroupItem = new TreeViewIconsItem();
if (contact.ContactGroup.Name.Equals("Personen")) tvNewGroupItem.HeaderText = "其他联系人";
|