2012-05-16 40 views
0

我試圖設置另一種形式中基於所述第一窗體(Form)上的用戶選擇的索引(窗口2)上設置的selectedIndex組合框的selectedIndex。麻煩從另一種形式

我得到這個代碼的價值,但它返回一個負數。

public int SelectedComboIndex 
{ 
    get { return comboBox1.SelectedIndex; } 
} 

,我試圖通過

comboBox1.SelectedIndex = form1.SelectedComboIndex; 

任何人都可以點我在正確的方向就如何做到這一點,設置組合框指數?

編輯:對於其中其調用form1上

Form1 form1 = null; 
public Form2(Form1 parentForm1) : this() 
{ 
    form1 = parentForm1; 
} 
+3

「-1」的'SelectedIndex'值表示沒有選中任何內容,您確定選擇了某項內容嗎?默認將'-1'爲'combBox1.SelectedIndex' – SwDevMan81

+0

這就是完全負數即時得到的,我相信林選擇,但只是想結轉的選擇上Form2的其他組合框 – heinst

+1

發佈您的代碼爲Form1和窗口2,你設置的屬性SelectedComboIndex和你在哪裏使用它 – Habib

回答

1

最佳做法是通常在表單的Load方法中留下任何類型的UI更改,這樣窗體就有機會正確初始化,並且在實際進行更改之前設置所有綁定。構造函數只能用於設置內部狀態。

private Form1 _parentForm; 
public Form2(Form1 parentForm) : this() 
{ 
    _parentForm = parentForm; 
} 

public Form2() 
{ 
    InitializeComponents(); 
} 

private void Form2_Load(object sender, EventArgs e) 
{ 
    richTextBox1.Font = new Font("Times New Roman", 12f, FontStyle.Regular); 
    dropdown(); 
    if(_parentForm != null) 
     comboBox1.SelectedIndex = _parentForm.SelectedComboIndex; 
    comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; 
} 

試試看看它是否有效。請確保正確地將Load處理程序添加到表單中(通過設計器或通過代碼this.Load += new EventHandler(Form2_Load)

2

的組合框返回一個負值(-1正常),如果沒有索引被選擇的代碼的更多代碼。

所以我相信(我沒有檢查),如果你的SelectedIndex屬性設置爲負值,所有你要做的是明確在組合框中選擇。

希望有所幫助。

+0

這只是重申了我已經在上面提到的,它不是一個真正的答案,只是如何組合框的工作 – SwDevMan81

0

Note: You should rename all your components to something more useful than controlType1, controlType2 etc. This is good for both you and us.

正如其他人說,如果form1.SelectedComboIndex返回-1(因爲form1.comboBox1沒有什麼選擇),然後行comboBox1.SelectedIndex = form1.SelectedComboIndex會(正確地)設置comboBox1的價值不了了之。

此外,正因爲有文字出現在你的ComboBox並不意味着它有一個選定的值。確保你的組合框實際上已經選擇了一個值(不僅僅是改變了它的文本)。您可以通過將DropDownStyle設置爲DropDownList來強制選擇一個值。其他兩種樣式允許用戶輸入自定義值。

如果您希望用戶能夠鍵入,請考慮將AutoCompleteMode設置爲SuggestAppendAutoCompleteSourceListItems。這使得更容易從組合框中正確選擇值,而不僅僅是改變文本(意外地將它留空)。

+0

所以我得到的是它的這一行代碼comboBox1.SelectedIndex = form1.SelectedComboIndex; – heinst