2016-12-01 51 views
0

所以這是我第一次使用visual studio和c#。我正在做一個簡單的任務管理器。我有一個ListBox顯示所有當前正在運行的進程。我想創建一個按鈕,當我第一次單擊該按鈕時,按字母順序對列表框進行排序,然後在第二次單擊時顛倒字母順序,然後再次單擊它時返回無序。如何給一個按鈕多個功能 - c#(Visual Studio)

到目前爲止,我做了一個按鈕來進行排序,像這樣的列表框...

private void sortButton_Click(object sender, EventArgs e) 
{ 
    processListBox.Sorted = true; 
} 

這工作,但我如何得到它,這樣當我再次點擊排序按鈕,它會排序它不同?我正在考慮某種類型的計數器,並根據數字是奇數還是偶數來排序,但我對此有3種情況(字母,反向字母和原始無序)

謝謝。

+0

您可根據該改變按鈕文字,並改變你的行爲?這就是我在過去爲連接/斷開按鈕所做的。 –

回答

0

解決這個經典的方法是使用一個標誌:

private bool sortDirection = false; //Or use an enum! 

private void sortButton_Click(object sender, EventArgs e) 
{ 
    sortDirection = !sortDirection; 
    if (sortDirection) 
    { 
     //Sort one way 
    } 
    else 
    { 
     Sort the other 
    } 
} 

回答你更一般的問題是相似的,使用標誌或枚舉。或者,使用包含的控件,如CheckboxToggleButton。然後,您可以關閉IsChecked屬性。

要做到的功能,兩件以上,我會用一個枚舉和模運算符:

private MyEnum sortType; 

private void sortButton_Click(object sender, EventArgs e) 
{ 
    sortType = (MyEnum)(++((int)sortType) % MyEnum.GetValues().Count()); 
    switch (sortType) 
    { 
    } 
} 

請注意,您可以緩存計數值,並可能提高鑄件代碼的一些其他方式。

0

您可以使用Checkbox代替顯示類型Button。所以添加複選框來形成。然後寫這些內部或後面InitializeComponent

this.checkbox1.ThreeState = true; 
this.checkbox1.Appearance = System.Windows.Forms.Appearance.Button; 

瞧你現在有3個狀態按鈕。

然後你可以像這樣切換(在CheckedChanged事件中)。

switch (checkbox1.CheckState) 
{ 
    case CheckState.Unchecked: // original unordered 
     break; 
    case CheckState.Checked: // Alphabetical 
     break; 
    case CheckState.Indeterminate: // Reverse Alphabetical 
     break; 
} 
0

與您的代碼我有一個想法:

private void sortButton_Click(object sender, EventArgs e) 
{ 
    processListBox.Sorted = !processListBox.Sorted;// true; 
} 

那要高度重視工作