面板C#-Windows窗体应用程序中文本框的存在性检查问题
对于我一直在开发的一款游戏,我正在尝试对面板中的所有文本框进行状态检查 在我们继续之前,这里是我的代码:面板C#-Windows窗体应用程序中文本框的存在性检查问题,c#,winforms,C#,Winforms,对于我一直在开发的一款游戏,我正在尝试对面板中的所有文本框进行状态检查 在我们继续之前,这里是我的代码: private void btnCheck_Click(object sender, EventArgs e) { foreach (Panel pnl in Controls.OfType<Panel>()) { foreach (TextBox tb in pnl.Controls.OfType<Tex
private void btnCheck_Click(object sender, EventArgs e)
{
foreach (Panel pnl in Controls.OfType<Panel>())
{
foreach (TextBox tb in pnl.Controls.OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show("Please give an answer for all questions!");
okFlag = false;
return;
}
else
{
okFlag = true;
}
}
}
if (okFlag == true)
{
//Check answers below
private void b检查\u单击(对象发送者,事件参数e)
{
foreach(Controls.OfType()中的面板pnl)
{
foreach(pnl.Controls.OfType()中的文本框tb)
{
if(string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show(“请回答所有问题!”);
okFlag=false;
返回;
}
其他的
{
okFlag=true;
}
}
}
if(okFlag==true)
{
//检查下面的答案
我遇到的问题是,即使我在所有文本框中都有值,消息框仍然会显示“请回答所有问题
okFlag是一个布尔值,我在代码顶部将其初始化为true
我还应该注意到,我有多个面板,其中包含文本框,但当一个面板显示时,所有其他面板都被隐藏
总之,我的问题是,我的文本框上的状态检查不起作用,因为它似乎认为文本框是空的或空的,即使我在其中有值。当您有多个面板且只有一个可见时,您的检查将在第一个不可见的面板退出,因为文本框将没有文本(它是不可见的) 在代码中,应检查面板是否可见:
private void btnCheck_Click(object sender, EventArgs e)
{
foreach (Panel pnl in Controls.OfType<Panel>())
{
if(!pnl.Visible)
continue;
foreach (TextBox tb in pnl.Controls.OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show("Please give an answer for all questions!");
return;
}
}
...
private void b检查\u单击(对象发送者,事件参数e)
{
foreach(Controls.OfType()中的面板pnl)
{
如果(!pnl.可见)
继续;
foreach(pnl.Controls.OfType()中的文本框tb)
{
if(string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show(“请回答所有问题!”);
返回;
}
}
...
当您有多个面板且只有一个可见时,您的支票将在第一个不可见面板退出,因为文本框将没有文本(它是不可见的)
在代码中,应检查面板是否可见:
private void btnCheck_Click(object sender, EventArgs e)
{
foreach (Panel pnl in Controls.OfType<Panel>())
{
if(!pnl.Visible)
continue;
foreach (TextBox tb in pnl.Controls.OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show("Please give an answer for all questions!");
return;
}
}
...
private void b检查\u单击(对象发送者,事件参数e)
{
foreach(Controls.OfType()中的面板pnl)
{
如果(!pnl.可见)
继续;
foreach(pnl.Controls.OfType()中的文本框tb)
{
if(string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show(“请回答所有问题!”);
返回;
}
}
...
我有多个面板,其中有文本框,但当一个面板显示时,所有其他面板都被隐藏
由于代码不区分可见面板和隐藏面板,因此获取所看到消息的唯一解释是隐藏面板中的某些文本框为空
您可以通过检查面板
在循环中的可见性来解决此问题:
foreach (Panel pnl in Controls.OfType<Panel>().Where(p => p.Visible))
{
foreach (TextBox tb in pnl.Controls.OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show("Please give an answer for all questions!");
return;
}
}
}
foreach(Controls.OfType()中的面板pnl,其中(p=>p.Visible))
{
foreach(pnl.Controls.OfType()中的文本框tb)
{
if(string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show(“请回答所有问题!”);
返回;
}
}
}
请注意,不需要使用okFlag
,因为当您将其设置为false
时,循环在return
语句中提前终止。换句话说,当okFlag
为false
时,无法到达外循环的末尾
我有多个面板,其中有文本框,但当一个面板显示时,所有其他面板都被隐藏
由于代码不区分可见面板和隐藏面板,因此获取所看到消息的唯一解释是隐藏面板中的某些文本框为空
您可以通过检查面板
在循环中的可见性来解决此问题:
foreach (Panel pnl in Controls.OfType<Panel>().Where(p => p.Visible))
{
foreach (TextBox tb in pnl.Controls.OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show("Please give an answer for all questions!");
return;
}
}
}
foreach(Controls.OfType()中的面板pnl,其中(p=>p.Visible))
{
foreach(pnl.Controls.OfType()中的文本框tb)
{
if(string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show(“请回答所有问题!”);
返回;
}
}
}
请注意,不需要使用okFlag
,因为当您将其设置为false
时,您的循环在return
语句中提前终止。换句话说,当okFlag
为false
时,无法到达外部循环的末尾。您提到:
我有多个面板,其中包含文本框,但所有其他面板
在显示一个面板时隐藏
控件隐藏并不意味着它在控件集合中仍然不可用。也许在检查该面板的控件之前,您还应该检查可见性状态
foreach (Panel pnl in Controls.OfType<Panel>())
{
if (pnl.Visible) {
foreach (TextBox tb in pnl.Controls.OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show("Please give an answer for all questions!");
okFlag = false;
return;
}
else
{
okFlag = true;
}
}
}
}
foreach(Controls.OfType()中的面板pnl)
{
如果(pnl.可见){
foreach(pnl.Controls.OfType()中的文本框tb)
{
if(string.IsNullOrEmpty(tb.Text.Trim()))
{
MessageBox.Show(“请回答所有问题!”);
okFlag=false;
返回;
}
其他的
{
okFlag=true;
}
}
}
}
您提到:
我有多个面板,其中包含文本框,但所有其他面板
在显示一个面板时隐藏
控件被隐藏并不意味着它在控件集合中仍然不可用