c# - 检查所有控件是否为空并对某些控件进行异常处理
问题描述
我想检查控件是否为空并对某些控件进行异常处理Controls
,例如我想为这些文本框Notes_txtbox
和Job_txt
. 这是我的功能,但它没有给我正确的结果。它给了Notes_txtbox
,Job_txt
是空的:
public bool Check_Inputs_Empty_Exception(List<Control> Exception_Control_List,
TableLayoutPanel TableLayoutPanel)
{
bool is_empy = false;
foreach (Control Control in TableLayoutPanel.Controls)
{
for (int i = 0; i < Exception_Control_List.Count; i++)
{
if (Control.Name != Exception_Control_List[i].Name &&
Control.GetType() == Exception_Control_List[i].GetType())
{
if (String.IsNullOrWhiteSpace(Control.Text))
{
MessageBox.Show(Control.Name + " is empty");
is_empy = true;
}
}
}
}
return is_empy;
}
}
这是函数调用:
if (Check_Inputs_Empty_Exception(
new List<Control> {Notes_txtbox,Job_txt}, TableLayoutPanel) == false)
{
// My Add Function
}
解决方案
这是一个简单而常见的逻辑缺陷。您的循环设置有错误的逻辑门。您只是在搜索任何不匹配的内容,您总是会找到(对于控件列表中的每个控件,异常列表中都有一个不是同一个控件的控件,除非异常列表只有一个元素)。
相反,搜索任何单个匹配项并在找到时设置一个标志。设置标志后,您将外循环移至下一次迭代。
public bool Check_Inputs_Empty_Exception(List<Control> Exception_Control_List, TableLayoutPanel TableLayoutPanel)
{
bool is_empy = false;
foreach (Control Control in TableLayoutPanel.Controls)
{
bool found = false;
for (int i = 0; i < Exception_Control_List.Count; i++)
{
if (Control == Exception_Control_List[i])
{
found = true;
break;
}
}
if (found) continue;
if (String.IsNullOrWhiteSpace(Control.Text))
{
MessageBox.Show(Control.Name + " is empty");
is_empy = true;
}
}
return is_empy;
}
使用一点 LINQ,您也可以将其简化很多。此外,如果您只想要文本框,您可以使用OfType<>()
.
public bool Check_Inputs_Empty_Exception(List<Control> Exception_Control_List, TableLayoutPanel TableLayoutPanel)
{
bool result = false;
var emptyTextboxes = TableLayoutPanel.Controls
.OfType<TextBox>()
.Where( c => string.IsNullOrEmpty(c.Text) )
.ToList();
foreach (var control in emptyTextboxes)
{
if (!Exception_Control_List.Any( c => c == control ))
{
MessageBox.Show(control.Name + " is empty");
result = true;
}
}
return result;
}
推荐阅读
- javascript - Bootstrap Button在点击后仍然处于奇怪的状态
- python - 更改屏幕或单击按钮时重置上一个屏幕
- typescript - Sharepoint NPM 已安装,但 Visual Studio 无法识别
- c# - 将 ConnectionId 添加到组时,我失去了 Hub 中的所有连接
- javascript - 一个图形即使在另一个图形下也是可交互的
- r - 使 BestNormalize 识别不同的因子水平以更好地进行数据转换
- javascript - 从顶部效果向下滑动不适用于 JavaScript
- html - 切换器图标无法调整导航栏宽度
- c# - 为同一用户在团队中重新安装机器人,不调用 OnMembersAddedAsync() 方法
- html - 显示块在 html/css 中不起作用。还有什么其他选择?