c# - 面板 C# 中文本框的存在性检查问题 - Windows 窗体应用程序

标签 c# winforms

对于我一直在开发的游戏,我正在尝试对面板中的所有文本框进行存在性检查。

在我们继续之前,这是我的代码:

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/

相关文章:

c# - 在 Windows 应用程序中使用 FolderBrowserDialog 浏览多个文件夹

c# - 如何缩小(缩放)整个图形结构?

c# - 自动部署,Global.asax : Could not load type Namespace. Global

c# - 将自定义 .NET ORM 迁移到 Entity Frame/Dapper

c# - Unity Test Runner 中的单元测试私有(private)方法

c# - Bit-Framework如何实现不同项目的模块化依赖注册?

c# - 解析 html -> xml 并使用 Xpath 查询

winforms - 用于 winforms .net 的 mvc 框架

vb.net - 将 VB.Net 窗口置于所有窗口之上

c# - 将 ctrl+c 发送到 c# 中的 cmd.exe 进程