0

ユーザーがリストから選択するか、独自の値を設定できるように、コンボボックスを設定しようとしています(コンボボックスはカスタム解像度用であるため、デフォルト値があるか、独自の値を指定できます)。

それらの値が正しくない場合(0未満またはIntでない場合)、ツールチップが表示され、フォーカスが失われないようにしようとしています。これが私のコードです:

private void cmbX_Graphics_Width_LostFocus(object sender, EventArgs e)
{
    int i = 0, width = 0;

    TLQAShared._debug("Lost Focus Fired");

    for (i = 0; i < cmbX_Graphics_Width.Items.Count; i++)
    {
            if (cmbX_Graphics_Width.Text.Equals(cmbX_Graphics_Width.Items[i].ToString()))
            {
                Properties.X.Default.Graphics_Width = int.Parse(cmbX_Graphics_Width.Items[i].ToString());
                TLQAShared._debug("FOUND!");

                return;
            }

            TLQAShared._debug("FOR: " + i.ToString() + "/" + (cmbX_Graphics_Width.Items.Count - 1).ToString() + ": " + cmbX_Graphics_Width.SelectedText + ":" + cmbX_Graphics_Width.Items[i].ToString());
    }

    TLQAShared._debug("Not true: '" + cmbX_Graphics_Width.Text + "'");

    if (int.TryParse(cmbX_Graphics_Width.Text.ToString(), out width))
    {
        TLQAShared._debug("TryParse: true");

        Properties.X.Default.Graphics_Width = width;
    }
    else
    {
        tt.SetToolTip(cmbX_Graphics_Width, "You must supply a valid integer");

        this.ActiveControl = cmbX_Graphics_Width;
        TLQAShared._debug("TryParse invalid.");
    }
}

ただし、コントロールがフォーカスを失うと、このコードは2回実行され、最初はこの部分で停止します。

TLQAShared._debug("Not true: '" + cmbX_Graphics_Width.Text + "'");

次に、それを再度実行しますが、コード全体を実行しますが、コントロールがフォーカスを失うのを防ぎません。

私が持っている2つの質問:最初に:これはベストプラクティスですか?そうでない場合はどうすればよいですか?第二に:それがベストプラクティスである場合、どのように修正すればよいですか?

4

2 に答える 2

0

これは良い習慣ではないと思います。私は次のようにします:

  1. 入力が有効かどうかを確認する関数を作成します (int > 0)
  2. ユーザーが入力を試みたときにこの関数を呼び出します
  3. 入力が有効でない場合combobox.focus()
于 2012-12-09T13:25:57.940 に答える