美好的一天,任何人都可以帮我解决这个问题...我有一个组合框和一个文本框。文本框(txtFruitNo)将检查Leave
事件下的文本长度。没关系。但是如果我在txtFruitNo尚未完成时单击组合框。我需要先完成txtFruitNo的长度,然后才能点击组合框。
如果我点击组合框即使txtFruitNo的长度尚未完成,我也不想显示消息框。
由于
private void cmbFruitSelection_SelectedIndexChanged(object sender, EventArgs e)
{
DateTime thetime = DateTime.Now;
String varApple = "App-Red";
String varBanana = "Ban-Yellow";
if (cmbFruitSelection.SelectedItem.ToString() == "Apple")
{
txtFruitNo.Text = varApple.ToString() + thetime.ToString("yyyy");
txtFruitNo.SelectionStart = txtFruitNo.Text.Length;
txtFruitNo.MaxLength = 18;
}
else if (cmbFruitSelection.SelectedItem.ToString() == "Banana")
{
txtFruitNo.Text = varBanana.ToString() + thetime.ToString("yyyy");
txtFruitNo.SelectionStart = txtFruitNo.Text.Length;
txtFruitNo.MaxLength = 17;
}
}
private void txtFruitNo_Leave(object sender, EventArgs e)
{
if (txtFruitNo.TextLength != txtFruitNo.MaxLength)
{
MessageBox.Show("Your fruit number is too short. Please check.");
txtFruitNo.Focus();
}
else
{
// Do something here
}
}
答案 0 :(得分:0)
对于程序的继续而言,“水果编号”在参数范围内的重要性。如果它不是在离开焦点时尝试将其移动到不同的控件,例如“OK”按钮可以运行参数检查,如果有效则继续,如果没有标记消息框并返回到文本框
答案 1 :(得分:0)
由于您的要求是仅在用户从组合中选择值后进行验证并提示消息框,请执行以下操作:
引入表单变量
private bool isComboClicked = false;
将以下行添加到cmbFruitSelection_SelectedIndexChanged
isComboClicked = true;
在上述事件开头添加上面的行会在从组合中选择值时提示长度验证消息。如果要在组合上提示消息以获取特定值,请在if语句if (comboBox1.SelectedItem.ToString() == "Apple")
等中移动它。
现在在txtFruitNo_Leave
事件中将代码括在下面的if条件中。
if (isComboClicked)
{
// Your Code
if (txtFruitNo.TextLength != txtFruitNo.MaxLength)
{
MessageBox.Show("Your fruit number is too short. Please check.");
txtFruitNo.Focus();
}
else
{
// Do something here
}
}
答案 2 :(得分:0)
据我了解:
你有"验证"在TextBox
eventhandler中的Leave
上,如果验证失败则会显示错误消息
但是,如果通过选择TextBox.Leave
控件引发ComboBox
事件,则必须禁止验证。
创建Panel
并仅设置txtFruitNo
和cmbFruitSelection
个控件。
// Validation function
private bool IsTextBoxValid()
{
return this.txtFruitNo.Length == this.txtFruitNo.maxlength;
}
然后为Validating
创建并挂钩Panel
eventhandler,您将在其中验证txtFruitNo
private void Panel_Validating(Object sender, CancelEventArgs e)
{
if(this.IsTextBoxValid() == false)
{
e.Cancel = true;
MessageBox.Show("Your fruit number is too short. Please check.") ;
}
}
仅当焦点移动到面板外时才会引发验证
使用Validating
事件会阻止在e.Cancel = true
时自动将焦点更改为外部控件
在这种情况下,可以聚焦组合框cmbFruitSelection
,用户可以通过从ComboBox中选择有效值来完成txtFruitNo
文本。
我认为使用ErrorProvider
控件会对用户更友好,然后是MessageBox
通过设计器在ErrorProvider
中添加Form
控件,并在代码中添加几行
private void Panel_Validating(Object sender, CancelEventArgs e)
{
if(this.IsTextBoxValid() == false)
{
e.Cancel = true;
this.ErrorProvider1.SetError(txtFruitNo,
"Your fruit number is too short. Please check.");
}
else
{
this.ErrorProvider1.Clear();
}
}
从ComboBox
private void cmbFruitSelection_SelectedIndexChanged(object sender, EventArgs e)
{
DateTime thetime = DateTime.Now;
String varApple = "App-Red";
String varBanana = "Ban-Yellow";
if (cmbFruitSelection.SelectedItem.ToString() == "Apple")
{
txtFruitNo.Text = varApple.ToString() + thetime.ToString("yyyy");
txtFruitNo.SelectionStart = txtFruitNo.Text.Length;
txtFruitNo.MaxLength = 18;
//Clear error
this.ErrorProvider1.Clear();
}
else if (cmbFruitSelection.SelectedItem.ToString() == "Banana")
{
txtFruitNo.Text = varBanana.ToString() + thetime.ToString("yyyy");
txtFruitNo.SelectionStart = txtFruitNo.Text.Length;
txtFruitNo.MaxLength = 17;
//Clear error
this.ErrorProvider1.Clear();
}
}