2010-09-20 47 views
0

剛纔有人回答我的問題,關於如何編輯裝有文本文件的組合框,以及如何保存最近編輯的行。現在C# - 編輯後的組合框索引更改

C#: Real-time combobox updating

的問題是,我只能改變一個字母它更新之前,然後將selectedIndex更改爲-1,所以我要選擇我在下拉列表中再次編輯線。

希望有人知道它爲什麼會改變索引,以及如何阻止它做到這一點。

+0

我們在這裏看不到prev的答案,或者你是如何實現它的。請更新上一個問題。投票結束。 – 2010-09-20 13:00:44

+0

[C#:實時組合框更新]的可能重複(http://stackoverflow.com/questions/3750990/c-real-time-combobox-updating) – 2010-09-20 13:01:04

+0

我做了,無論如何。 – Nick 2010-09-20 13:25:18

回答

3
private int currentIndex; 

public Form1() 
{ 
    InitializeComponent(); 

    comboBox1.SelectedIndexChanged += RememberSelectedIndex; 
    comboBox1.KeyDown += UpdateList; 
} 

private void RememberSelectedIndex(object sender, EventArgs e) 
{ 
    currentIndex = comboBox1.SelectedIndex; 
} 

private void UpdateList(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter && currentIndex >= 0) 
    { 
     comboBox1.Items[currentIndex] = comboBox1.Text; 
    } 
} 
+0

謝謝,其他代碼也可能有效,但這個對我來說似乎更靈活一些。 – Nick 2010-09-22 06:23:35

4

正如我對這個問題的理解一樣,你可以做一件事。在comboBox1_TextChanged方法中,您可以設置一個bool變量,比如說textChangedFlag爲true,而不是放置以前的代碼,您可以將此變量的默認值設置爲false。 然後使用KeyDown事件來編輯組合框項目。 我會給出一個示例代碼。

示例代碼:

if (e.KeyCode == Keys.Enter) 
     { 
      if (textChangedFlag) 
      { 
       if(comboBox1.SelectedIndex>=0) 
       { 
        int index = comboBox1.SelectedIndex; 
        comboBox1.Items[index] = comboBox1.Text; 
        textChangedFlag = false; 
       } 

      } 
     } 

你可以把這個代碼在KeyDown事件處理程序方法。 希望它有幫助

+0

comboBox1.SelectedIndex等於-1 – SKINDER 2010-09-20 14:27:08

+0

謝謝你的代碼,我不能測試它,直到明天,所以我會讓你知道。 – Nick 2010-09-21 06:31:57