2011-12-27 9 views
1

私はリストビューとそのリストビューからアイテムを削除するボタンがあります。項目は選択されていないときは無効にする必要がありますが、有効にすると有効にする必要があります。私はさまざまなイベントの組み合わせを試みましたが、ボタンを無効にするためのボタンを見つけられませんでした...C# - リストビューアイテム選択キュー

リストビューがフォーカスを失ったときにボタンを無効にすると、アイテムを削除できません。ボタンをクリックすると、リストビューの外側をクリックする必要があります。

Visual Studioでの経験が豊富な人が、リストビューイベントの正しい組み合わせを見つけて、ボタンを有効または無効にすることができますか?アイテムが選択されている

+0

Winforms、WPF、MVCまたはWebForms? – ivowiblo

+0

私は思うが更新されたタグを更新しました – mowwwalker

+0

アイテムはいつ変更されますか? – ivowiblo

答えて

2

ジャスト(コンストラクタで例えば)このようなイベントItemSelectionChangedを購読:

listView1.ItemSelectionChanged += OnListViewItemSelectionChanged; 

そして、イベントメソッドで有効/そのようなあなたのボタンを無効にします。

private void OnListViewItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) 
{ 
    button1.Enabled = (listView1.SelectedItems.Count > 0); 
} 
+0

私はそれを試みましたが、リストビューの外にあるボタンをクリックすると、選択を取り去っても実行されません。 – mowwwalker

+0

@Walkerneo:アイテムはまだ選択されていますが、選択項目はそれ以上表示されません。選択範囲を表示するには、コントロールにフォーカスがない場合でも、コンストラクタの 'listView1.HideSelection = false;'のように次の行を追加します。 – Fischermaen

+0

素晴らしいです、ありがとうございます。その厄介な破線のボーダーを取り除く方法はありますか?最後に選択したアイテムの周りのもの、それがもはや選択されていなくても。 – mowwwalker

0

私はいくつかのコードをテストしましたこれを行うには:

private void Form1_Load(object sender, EventArgs e) 
    { 
     //Added some dummy items 
     for(int i=0; i<10; i++) 
      listView1.Items.Add("Item"+i.ToString()); 
     //Disable the button 
     button1.Enabled = false; 

    } 

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     button1.Enabled = (listView1.SelectedItems.Count > 0); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     listView1.Items.Remove(listView1.SelectedItems[0]); 
    } 

これは完璧に機能しています。

問題が発生した場合は、ここにコードを投稿してください。

関連する問題