【问题标题】:Check if there is at least one checked checkbox in two windows forms C#检查两个windows窗体C#中是否至少有一个选中的复选框
【发布时间】:2021-06-13 15:33:15
【问题描述】:

我在 Visual Studio 中有一个学校项目,Windows 窗体应用程序,C#,它有 4 个连接的窗体。

从第 1 到第 2,从第 3 到第 4 形式的连接很容易制作。但我不太确定如何建立从第 2 种形式到第 3 种形式的联系。

我的第一个和第二个表单有复选框,总共 12 个 - 每个表单上有 6 个,它们不在复选框列表中(如果这很重要)。所以我的问题来了... 该应用程序类似于一个小型在线商店。第一种和第二种形式就像页面一样,您可以在其中查看和选择要购买的东西。完成选择后,您可以通过单击按钮转到第三个“页面”/表格。但是为了进入第三种形式,我必须检查第一个 第二个“页面”中是否至少有一个选中的复选框。如果没有至少 1 个复选框,则必须显示错误消息。我问我的老师我怎么可能做到这一点(因为她没有告诉我们如何做类似的事情)。她告诉我创建一个新类,我可以在其中编写检查代码,但仅此而已。

我环顾四周,但无法真正找到解决问题的方法。

任何小事都可以帮上忙,我只是需要一些老师无法提供给我的指导... 谢谢。

【问题讨论】:

  • 我不确定这是否符合您的练习要求,但您是否考虑过将“Form1”和“Form2”放在同一个 Form 上,并简单地使用两个 Panel 切换可见性根据需要的面板。这样所有组件都在同一个Form 上,验证复选框变得非常容易。
  • 如果您使用Windows Forms Data Binding,您可以在表单之间共享相同的数据,从而使这种要求变得容易。
  • @Johnny Pickles,有更新吗?请检查我的答案是否适合您。

标签: c# visual-studio winforms class


【解决方案1】:

您可以尝试使用 Application.OpenForms 方法和 linq 来获取当前的表单控件状态。

这是一个代码示例,您可以参考:

表格1:

private void Form1_Load(object sender, EventArgs e)
{
    Form2 form2 = new Form2();
    form2.Show();
}

表格2:

private void button1_Click(object sender, EventArgs e)
{
    Form1 form1 = (Form1)Application.OpenForms["Form1"];
    int count1 = form1.Controls
        .OfType<CheckBox>()
        .Where(i => i.Checked)
        .Count();
    Form2 form2 = (Form2)Application.OpenForms["Form2"];
    int count2 = form2.Controls
        .OfType<CheckBox>()
        .Where(i => i.Checked)
        .Count();
    int totalcount = count1 + count2;
    if(totalcount<1)
    {
        MessageBox.Show("You must choose at least one");
    }
    else
    {
        Form3 form3 = new Form3();
        form3.Show();
    }
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2012-04-11
    • 1970-01-01
    相关资源
    最近更新 更多