GUI

2009-06-30 10 views
0

経由辞書から項目を選択し、私はこのような状況があります。GUI

Dictionary<Int32, userInfo> users = new Dictionary<Int32, userInfo>(); 

のInt32は、ユーザーIDですとのUserInfoは、名前やその他の詳細が含まれています。 フォームに名前のリストを表示し、プログラムを使用している人がウィンドウを開くためにプログラムをダブルクリックすることを許可します(MSNメッセンジャーの場合と同様)。ユーザーの名前をダブルクリックしたとき、私はIDを知っておく必要がありますので、私は

OpenChatWindow(Int32 id, string name); 

を行うことができます私はリサイズを使用しています、実際にそれを行う方法がわからないです。私はListBoxを考えましたが、もう一度、私はどのようにわかりません。私は何をすべきか?

PS。 userInfo.nameは辞書内でユニークですが、私は本当にそれを探し始めたくありません。

答えて

6

ユーザー情報を辞書オブジェクトに格納することを選択しませんでした。私はUserと呼ばれるクラスを作成し、idにすべての情報をクラスに格納します。

オーバーライド「.ToString()」Userクラスのメソッドやユーザーの名前の代わりに、あなたは直接リストボックスに自分のユーザーオブジェクトを追加することができます

protected override string ToString() 
{ 
    return this.Name; 
} 

すなわち、それは出力作る彼らユーザーの名前が表示されます。自動的にキャストされている場合、私は100%ではないオブジェクトとしてそれらをキャストする必要があります...私はあなたにそれに戻ってきます!リストボックスのSelectedIndexChangedイベントに続いて

、あなたは、単に行うことができます:あなたが持っているのであれば

OpenChatWindow(user.ID, user.Name); 

:あなたのルックアップに使用するためのユーザオブジェクトを返します

var user = myListBox.SelectedItem as User; 

コントローラークラスをListBoxのSelectedIndexChangedイベントに接続して、何をしたいかを処理することができます。

public void OnUserSelected(object sender, EventArgs e) 
{ 
     var lstBox = sender as ListBox; 
     if (lstBox != null) 
     { 
      if (lstBox.SelectedItem is User) 
      { 
       var user = lstBox.SelectedItem as User; 
       OpenChatWindow(user.ID, user.Name); 
      } 
     } 
} 
+1

リストボックスに追加したときにオブジェクトとしてユーザーをキャストする必要はありません、オブジェクトへの暗黙的なダウンキャストは常に.NETで許可されています –

+0

私は約99%がパトリックがそれをクリアするために感謝していた!あなたはAddRangeメソッドを使用する場合、あなたはキャストthoを行う必要がかなり確信していますか? – James

+0

OPはC#3.0を指定していないため、「User user = myListBox.SelectedItem as User;」と宣言する必要があります。 –

2

このようにuserInfoクラスを変更すると、userIdが含まれます(userIdがまだない場合)。次に、リストボックスに辞書をデータバインドすることができます

listBox.DisplayMember = "Name"; 
listBox.ValueMember = "userId"; 
listBox.DataSource = new List<UserInfoClass>(users.Values); 

次に、あなたがあなたのユーザ情報クラスに単にキャストSelectedItemプロパティを取得することができます。

UserInfoClass userInfo = (UserInfoClass)listBox.SelectedItem; 
OpenChatWindow(userInfo.userId, userInfo.Name); 
+0

この構文は何ですか?それは文字列でメンバーを検出できますか? – Nefzen

+0

ユーザー辞書を変更しても、リストボックスは変更されません。それは良いことではありません:\ – Nefzen

+0

このシンタックスリストボックスでは、自動的に値を抽出し、msdnで詳細を読んでください。辞書によれば、あなたがクイックルックアップを必要としない場合、DictionaryをList に置き換えてlistBoxに直接バインドすることができます。 – arbiter