循环访问表单上的一些控件
loop through some controls on a form
使用 c# win 表单
我有一个包含许多文本框和组合框的表单
部分控件 - 不是全部 - 不能为空
如果用户单击保存按钮,我希望该空控件的标签变为红色....
我试过了
if (cmbNyaba.SelectedIndex == -1)
{
lblNyaba.ForeColor = Color.Red;
return;
}
else
{
lblNyaba.ForeColor = Color.Black;
}
if (txtCaseHasr.Text == "")
{
lblHasrNum.ForeColor = Color.Red;
return;
}
else
{
lblHasrNum.ForeColor = Color.Black;
}
if (txtCaseNum.Text == "")
{
lblCaseNum.ForeColor = Color.Red;
return;
}
else
{
lblCaseNum.ForeColor = Color.Black;
}
但我认为这不是一个好方法
我应该使用标签 属性 还是什么?
谢谢
我试过了
public static Boolean ValidateControle(Control MyObjet, int oblig = 0)
{
ErrorProvider err = new ErrorProvider();
String mess = "";
Boolean valid = true;
if (MyObjet != null)
{
if (oblig == 1)
{
mess = "Can not be empty !";
}
if (MyObjet.Text.Trim().Length == 0) valid = false;
if (MyObjet is ComboBox)
{
ComboBox cmb = (MyObjet as ComboBox);
if (cmb.SelectedIndex == -1)
{
mess = "Select at least one element !";
valid = false;
}
}
if (valid == false)
{
err.SetError(MyObjet, mess);
MyObjet.BackColor = Color.FromArgb(253, 108, 119);
}
else
{
err.SetError(MyObjet, "");
MyObjet.BackColor = Color.White;
}
err.SetIconAlignment(MyObjet, ErrorIconAlignment.MiddleRight);
}
return valid;
}
private void btnSave_Click(object sender, EventArgs e)
{
if (cmbCaseCrime.SelectedIndex == -1 ||
cmbMember.SelectedIndex == -1 ||
cmbCaseType.SelectedIndex == -1 ||
string.IsNullOrEmpty(txtCaseNum.Text) ||
string.IsNullOrEmpty(txtCaseHasr.Text))
{
ValidateControle(cmbCaseCrime, 1);
ValidateControle(cmbMember, 1);
ValidateControle(cmbCaseType, 1);
ValidateControle(txtCaseHasr, 1);
ValidateControle(txtCaseNum, 1);
return;
}
string str = btnSave.Text;
switch (str)
{
case "add":
DataTable dt = new DataTable();
dt = cs.Verify_CASES(txtCaseNum.Text, txtCaseYear.Text, Convert.ToInt32(cmbCaseType.SelectedValue), Convert.ToInt32(cmbCaseRegion.SelectedValue));
if (dt.Rows.Count > 0)
{
MessageBox.Show("already added ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
ce.ADD_CASE(txtCaseNum.Text, txtCaseHasr.Text, dtp_CaseComingDate.Value, txtCaseYear.Text,
Convert.ToInt32(cmbCaseType.SelectedValue),
Convert.ToInt32(cmbCaseRegion.SelectedValue),
Convert.ToInt32(cmbCaseStatus.SelectedValue),
Convert.ToInt32(cmbCaseCrime.SelectedValue),
Convert.ToInt32(cmbMember.SelectedValue), txtCaseStatusDate.Text);
MessageBox.Show("added successfuly", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtidCase.Text = ce.GET_LAST_CASE_ID().Rows[0][0].ToString();
this.btnAddRemain.Enabled = true;
this.cmbCaseRemain.Focus();
this.btnSave.Enabled = false;
}
您可以做的第一件事是使用 this.Controls.OfType<T>
查找给定类型的所有控件。
例如,查找哪些标签为空可能类似于
var labels = this.Controls.OfType<Label>();
foreach(var label in labels)
if(label.Text == "")
//the actions you want to do.
不过,如果您有一些容器控件,则还必须遍历它们。
您可以尝试的第二种方法是使用 Validating
和 Validated
事件。
你可以使用这个功能:
public static Boolean ValidateControle(Control MyObjet, int oblig=0)
{
ErrorProvider err=new ErrorProvider ();
String mess = "";
Boolean valid = true;
if (MyObjet != null)
{
if (oblig == 1)
{
mess = "Can not be empty !";
}
if (MyObjet.Text.Trim().Length == 0) valid = false;
if (MyObjet is ComboBox)
{
ComboBox cmb = (MyObjet as ComboBox);
if (cmb.SelectedIndex == -1)
{
mess = "Select at least one element !";
valid = false;
}
}
if (valid == false)
{
err.SetError(MyObjet, mess);
MyObjet.BackColor = Color.FromArgb(253, 108, 119);
}
else
{
err.SetError(MyObjet, "");
MyObjet.BackColor = Color.White;
}
err.SetIconAlignment(MyObjet, ErrorIconAlignment.BottomRight);
}
return valid;
}
并且您可以使用 oblig 参数来指定控件是否可以为空。
在此调用中,您可以通过在第二个参数中传递 1 来指定 控件是必需的
通过 :
调用函数
ValidateControle(textBox1, 1);
ValidateControle(comboBox1,1);
ValidateControle(comboBox2,0);
或:
foreach ( Control cn in this.Controls )
{
ValidateControle(cn);
}
为此,您必须在 class 中声明您的提供商,例如:
public partial class Form1 : Form
{
ErrorProvider err = new ErrorProvider();
public Form1()
{
InitializeComponent();
}
对于测试你是否必须记录你可以这样做:
private void button3_Click(object sender, EventArgs e)
{
bool test =true ;
test= ValidateControle(textBox1, 1);
test= ValidateControle(comboBox1,1);
if (test)
{
//continue working and saving the record
}
else
{
//Stop and traancate recording
}
}
要清除所有错误标志,您可以将 void 声明为:
private void ClearError()
{
foreach (Control cn in this.Controls)
{
err.SetError(cn,"");
err.Clear();
cn.BackColor = Color.White;
}
}
如果你想要清除错误标志,你可以调用这个函数。
如果我的回答对您有帮助,请点赞并标记为已解决
首先,您必须在 class 形式下将 ErrorProvider 声明为全局,并添加一个 void ClearError as :
public partial class Form1 : Form
{
ErrorProvider err = new ErrorProvider();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void ClearError()
{
// ErrorProvider err = new ErrorProvider();
foreach (Control cn in this.Controls)
{
err.SetError(cn,"");
err.Clear();
cn.BackColor = Color.White;
}
}
并且您必须将 btnSave_Click 更改为 :
private void btnSave_Click(object sender, EventArgs e)
{
bool test =true ;
ClearError (); // for clear all mark error in all conrols in the form
test= ValidateControle(cmbCaseCrime, 1);
test= ValidateControle(cmbMember, 1);
test= ValidateControle(cmbCaseType, 1);
test= ValidateControle(txtCaseHasr, 1);
test= ValidateControle(txtCaseNum, 1);
if (test ==false )
{
MessageBox .Show("You have some error !");
return;
}
string str = btnSave.Text;
switch (str)
{
case "add":
DataTable dt = new DataTable();
dt = cs.Verify_CASES(txtCaseNum.Text, txtCaseYear.Text, Convert.ToInt32(cmbCaseType.SelectedValue), Convert.ToInt32(cmbCaseRegion.SelectedValue));
if (dt.Rows.Count > 0)
{
MessageBox.Show("already added ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
ce.ADD_CASE(txtCaseNum.Text, txtCaseHasr.Text, dtp_CaseComingDate.Value, txtCaseYear.Text,
Convert.ToInt32(cmbCaseType.SelectedValue),
Convert.ToInt32(cmbCaseRegion.SelectedValue),
Convert.ToInt32(cmbCaseStatus.SelectedValue),
Convert.ToInt32(cmbCaseCrime.SelectedValue),
Convert.ToInt32(cmbMember.SelectedValue), txtCaseStatusDate.Text);
MessageBox.Show("added successfuly", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtidCase.Text = ce.GET_LAST_CASE_ID().Rows[0][0].ToString();
this.btnAddRemain.Enabled = true;
this.cmbCaseRemain.Focus();
this.btnSave.Enabled = false;
}
希望能解决您的问题,请为答案投票并将其标记为已解决。
使用 c# win 表单
我有一个包含许多文本框和组合框的表单
部分控件 - 不是全部 - 不能为空
如果用户单击保存按钮,我希望该空控件的标签变为红色....
我试过了
if (cmbNyaba.SelectedIndex == -1)
{
lblNyaba.ForeColor = Color.Red;
return;
}
else
{
lblNyaba.ForeColor = Color.Black;
}
if (txtCaseHasr.Text == "")
{
lblHasrNum.ForeColor = Color.Red;
return;
}
else
{
lblHasrNum.ForeColor = Color.Black;
}
if (txtCaseNum.Text == "")
{
lblCaseNum.ForeColor = Color.Red;
return;
}
else
{
lblCaseNum.ForeColor = Color.Black;
}
但我认为这不是一个好方法
我应该使用标签 属性 还是什么?
谢谢
我试过了
public static Boolean ValidateControle(Control MyObjet, int oblig = 0)
{
ErrorProvider err = new ErrorProvider();
String mess = "";
Boolean valid = true;
if (MyObjet != null)
{
if (oblig == 1)
{
mess = "Can not be empty !";
}
if (MyObjet.Text.Trim().Length == 0) valid = false;
if (MyObjet is ComboBox)
{
ComboBox cmb = (MyObjet as ComboBox);
if (cmb.SelectedIndex == -1)
{
mess = "Select at least one element !";
valid = false;
}
}
if (valid == false)
{
err.SetError(MyObjet, mess);
MyObjet.BackColor = Color.FromArgb(253, 108, 119);
}
else
{
err.SetError(MyObjet, "");
MyObjet.BackColor = Color.White;
}
err.SetIconAlignment(MyObjet, ErrorIconAlignment.MiddleRight);
}
return valid;
}
private void btnSave_Click(object sender, EventArgs e)
{
if (cmbCaseCrime.SelectedIndex == -1 ||
cmbMember.SelectedIndex == -1 ||
cmbCaseType.SelectedIndex == -1 ||
string.IsNullOrEmpty(txtCaseNum.Text) ||
string.IsNullOrEmpty(txtCaseHasr.Text))
{
ValidateControle(cmbCaseCrime, 1);
ValidateControle(cmbMember, 1);
ValidateControle(cmbCaseType, 1);
ValidateControle(txtCaseHasr, 1);
ValidateControle(txtCaseNum, 1);
return;
}
string str = btnSave.Text;
switch (str)
{
case "add":
DataTable dt = new DataTable();
dt = cs.Verify_CASES(txtCaseNum.Text, txtCaseYear.Text, Convert.ToInt32(cmbCaseType.SelectedValue), Convert.ToInt32(cmbCaseRegion.SelectedValue));
if (dt.Rows.Count > 0)
{
MessageBox.Show("already added ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
ce.ADD_CASE(txtCaseNum.Text, txtCaseHasr.Text, dtp_CaseComingDate.Value, txtCaseYear.Text,
Convert.ToInt32(cmbCaseType.SelectedValue),
Convert.ToInt32(cmbCaseRegion.SelectedValue),
Convert.ToInt32(cmbCaseStatus.SelectedValue),
Convert.ToInt32(cmbCaseCrime.SelectedValue),
Convert.ToInt32(cmbMember.SelectedValue), txtCaseStatusDate.Text);
MessageBox.Show("added successfuly", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtidCase.Text = ce.GET_LAST_CASE_ID().Rows[0][0].ToString();
this.btnAddRemain.Enabled = true;
this.cmbCaseRemain.Focus();
this.btnSave.Enabled = false;
}
您可以做的第一件事是使用 this.Controls.OfType<T>
查找给定类型的所有控件。
例如,查找哪些标签为空可能类似于
var labels = this.Controls.OfType<Label>();
foreach(var label in labels)
if(label.Text == "")
//the actions you want to do.
不过,如果您有一些容器控件,则还必须遍历它们。
您可以尝试的第二种方法是使用 Validating
和 Validated
事件。
你可以使用这个功能:
public static Boolean ValidateControle(Control MyObjet, int oblig=0)
{
ErrorProvider err=new ErrorProvider ();
String mess = "";
Boolean valid = true;
if (MyObjet != null)
{
if (oblig == 1)
{
mess = "Can not be empty !";
}
if (MyObjet.Text.Trim().Length == 0) valid = false;
if (MyObjet is ComboBox)
{
ComboBox cmb = (MyObjet as ComboBox);
if (cmb.SelectedIndex == -1)
{
mess = "Select at least one element !";
valid = false;
}
}
if (valid == false)
{
err.SetError(MyObjet, mess);
MyObjet.BackColor = Color.FromArgb(253, 108, 119);
}
else
{
err.SetError(MyObjet, "");
MyObjet.BackColor = Color.White;
}
err.SetIconAlignment(MyObjet, ErrorIconAlignment.BottomRight);
}
return valid;
}
并且您可以使用 oblig 参数来指定控件是否可以为空。 在此调用中,您可以通过在第二个参数中传递 1 来指定 控件是必需的 通过 :
调用函数 ValidateControle(textBox1, 1);
ValidateControle(comboBox1,1);
ValidateControle(comboBox2,0);
或:
foreach ( Control cn in this.Controls )
{
ValidateControle(cn);
}
为此,您必须在 class 中声明您的提供商,例如:
public partial class Form1 : Form
{
ErrorProvider err = new ErrorProvider();
public Form1()
{
InitializeComponent();
}
对于测试你是否必须记录你可以这样做:
private void button3_Click(object sender, EventArgs e)
{
bool test =true ;
test= ValidateControle(textBox1, 1);
test= ValidateControle(comboBox1,1);
if (test)
{
//continue working and saving the record
}
else
{
//Stop and traancate recording
}
}
要清除所有错误标志,您可以将 void 声明为:
private void ClearError()
{
foreach (Control cn in this.Controls)
{
err.SetError(cn,"");
err.Clear();
cn.BackColor = Color.White;
}
}
如果你想要清除错误标志,你可以调用这个函数。 如果我的回答对您有帮助,请点赞并标记为已解决
首先,您必须在 class 形式下将 ErrorProvider 声明为全局,并添加一个 void ClearError as :
public partial class Form1 : Form
{
ErrorProvider err = new ErrorProvider();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void ClearError()
{
// ErrorProvider err = new ErrorProvider();
foreach (Control cn in this.Controls)
{
err.SetError(cn,"");
err.Clear();
cn.BackColor = Color.White;
}
}
并且您必须将 btnSave_Click 更改为 :
private void btnSave_Click(object sender, EventArgs e)
{
bool test =true ;
ClearError (); // for clear all mark error in all conrols in the form
test= ValidateControle(cmbCaseCrime, 1);
test= ValidateControle(cmbMember, 1);
test= ValidateControle(cmbCaseType, 1);
test= ValidateControle(txtCaseHasr, 1);
test= ValidateControle(txtCaseNum, 1);
if (test ==false )
{
MessageBox .Show("You have some error !");
return;
}
string str = btnSave.Text;
switch (str)
{
case "add":
DataTable dt = new DataTable();
dt = cs.Verify_CASES(txtCaseNum.Text, txtCaseYear.Text, Convert.ToInt32(cmbCaseType.SelectedValue), Convert.ToInt32(cmbCaseRegion.SelectedValue));
if (dt.Rows.Count > 0)
{
MessageBox.Show("already added ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else
{
ce.ADD_CASE(txtCaseNum.Text, txtCaseHasr.Text, dtp_CaseComingDate.Value, txtCaseYear.Text,
Convert.ToInt32(cmbCaseType.SelectedValue),
Convert.ToInt32(cmbCaseRegion.SelectedValue),
Convert.ToInt32(cmbCaseStatus.SelectedValue),
Convert.ToInt32(cmbCaseCrime.SelectedValue),
Convert.ToInt32(cmbMember.SelectedValue), txtCaseStatusDate.Text);
MessageBox.Show("added successfuly", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.txtidCase.Text = ce.GET_LAST_CASE_ID().Rows[0][0].ToString();
this.btnAddRemain.Enabled = true;
this.cmbCaseRemain.Focus();
this.btnSave.Enabled = false;
}
希望能解决您的问题,请为答案投票并将其标记为已解决。