如果值不正确,请将焦点设置回ComboBox

时间:2012-12-09 12:22:50

标签: c# combobox lostfocus

我正在尝试设置我的ComboBoxes,以便用户可以从列表中选择或设置自己的值(组合框用于自定义分辨率,因此将有默认值或者他们可以自己提供)。

我试图让它成为如果它们的值不正确(低于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.");
    }
}

但是,如果控件失去焦点,则此代码会执行两次,第一次停止在此部分:

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

然后再次执行但执行整个代码,但不会阻止控件失去焦点。

我有两个问题: 首先:这是最好的做法,如果不是,我该怎么办? 其次:如果是最佳做法,我该如何解决?

2 个答案:

答案 0 :(得分:1)

使用combobox1.Select();将焦点放在组合框中。

答案 1 :(得分:0)

我认为这不是一个好习惯。我会这样做:

  1. 创建一个函数来检查输入是否有效(int> 0)
  2. 当用户尝试输入输入时调用此功能
  3. 如果输入无效,请致电combobox.focus()