0

最初のフォーム (form1) でユーザーが選択したインデックスに基づいて、別のフォーム (form2) に selectedindex を設定しようとしています。

このコードで値を取得していますが、負の数を返します。

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

そして、私はコンボボックスインデックスを設定しようとしています

comboBox1.SelectedIndex = form1.SelectedComboIndex;

これを行う方法について、誰かが私を正しい方向に向けることができますか?

編集: form1 でコードを呼び出す場所の追加コード

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

3 に答える 3

2

インデックスが選択されていない場合、コンボボックスは負の値 (通常は -1) を返します。

したがって、SelectedIndex プロパティに負の値を設定すると、コンボボックスの選択をクリアするだけで済むと思います (確認していません)。

それが役立つことを願っています。

于 2012-05-16T15:08:47.673 に答える
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)

于 2012-05-16T17:33:14.280 に答える
0

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

他の人が言ったように、 ifform1.SelectedComboIndexが -1 を返す (form1.comboBox1何も選択されていないため) 場合、行comboBox1.SelectedIndex = form1.SelectedComboIndexは (正しく)comboBox1の値を何も設定しません。

さらに、あなたの中にテキストが存在ComboBoxするからといって、それが選択された値を持っているとは限りません。コンボボックスが実際に値を選択していることを確認してください (テキストを変更しただけではありません)。DropDownStyleを に設定すると、強制的に値を選択できますDropDownList。他の両方のスタイルでは、ユーザーがカスタム値を入力できます。

ユーザーが入力できるようにする場合は、およびに設定AutoCompleteModeすることを検討してください。これにより、テキストを変更する (誤って null のままにする) よりも、コンボボックスから値を正しく選択することが容易になります。SuggestAppendAutoCompleteSourceListItems

于 2012-05-16T15:16:56.267 に答える