2017-09-04 230 views
0

我有一個包含人名的項目列表。我已經這樣做了,一旦到達列表的末尾,該按鈕就變爲禁用狀態,以便清楚地看到沒有剩下的項目了。問題是,當我回到上一個項目,即使我已重新啓用它,該按鈕保持禁用...禁用後禁用按鈕

所以我有禁用/啓用按鈕的方法,並且在button_click事件中存在對此方法的調用處理程序:

public void DisableButton() 
{ 
    if(birthdays.IsThereAnotherItem()) 
    { 
     btnNext.Enabled = true; 
    } 
    else if (!birthdays.IsThereAnotherItem()) 
    { 
     btnNext.Enabled = false; 
    }   
} 

我還激活了button_EnabledChanged事件處理程序。

我回去這樣一項目...

private void btnPrevious_Click(object sender, EventArgs e) 
{ 
    birthdays.StepToPreviousPerson(); 
    DisplayPeople();  
} 
+6

爲什麼不'btnNext.Enabled = birthdays.IsThereAnotherItem();'並放棄所有'if's? –

+0

你如何「回到以前的項目」?你應該在這個函數/方法中包含這個方法 –

+0

@DmitryBychenko相同的結果...(按鈕在列表結束時不會被禁用,但不會再次啓用)。 – mts396

回答

1

當你不得不檢查禁用btnNext按鈕?上birthday選定項目變更。當且僅當選擇最後一個項目時,btnNext應該被禁用。

假設birthdayListBoxSelectionModeSelectionMode.One你可以把它像這樣:

private void birthday_SelectedIndexChanged(object sender, EventArgs e) { 
    // Previous is Enabled if and only if the selected item is not first one 
    btnPrevious.Enabled = birthday.SelectedIndex > 0; 

    // btnNext is enabled if and only if 
    // 1. birthday has items (not empty) 
    // 2. An item selected 
    // 3. The item is not the last one 
    btnNext.Enabled = birthday.SelectedIndex >= 0 && // an item selected 
         birthday.SelectedIndex < birthday.Items.Count - 1; 
    } 

所以你只要birthday選擇改變(無論何種原因都btnNextbtnPrevious更新 - StepToPreviousPersonStepToNextPerson電話,直接選擇等)

+0

當選擇'下一個'或'上一個'按鈕時檢查禁用按鈕(抱歉,我沒有在這裏顯示它們)。 '生日'不是一個列表框,它只是一個文本框。 – mts396

0

好的,我明白了@ Eli的評論。我必須將DisableButton()的函數調用放在'btnPrevious'事件處理函數中,以及我已有的'Next'按鈕事件處理函數中。非常簡單的事情,我從一開始就錯過了。

感謝所有幫助過我的人。