对于我一直在开发的游戏,我正在尝试对面板中的所有文本框进行存在性检查。
在我们继续之前,这是我的代码:
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
我遇到的问题是,即使我在所有文本框中都有值,MessageBox 仍会显示“请回答所有问题。
okFlag 是一个 bool 值,我在代码顶部将其初始化为 true。
我还应该注意到,我有多个面板,其中包含文本框,但当显示一个面板时,所有其他面板都被隐藏了。
This is the source where I got the code for this from
总而言之,我的问题是对我的文本框的存在性检查不起作用,因为它似乎认为文本框为 null 或空,即使我确实在其中包含值也是如此。
最佳答案
当您有多个面板并且只有一个可见时,您的检查将在第一个不可见面板处退出,因为文本框没有文本(它是不可见的)。
在您的代码中,您应该检查面板是否可见:
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;
}
}
...
关于c# - 面板 C# 中文本框的存在性检查问题 - Windows 窗体应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49862201/