我正在尝试设置我的 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 + "'");
然后再次执行,但执行整个代码,但不会阻止控件失去焦点。
我有两个问题:首先:这是最佳做法吗?如果不是,我应该怎么做?其次:如果这是最佳实践,我将如何解决它?