另一个类中的Boolean,返回它的值

时间:2018-01-21 09:58:52

标签: c#

我的bool和windowsforms有问题。

我有一些radiobuttonstextboxes。如果他们没有填补我想要返回false。我希望在control.cs中包含这些语句,并且当我按下我的按钮(createProject)时,我想调用我的control.cs。如果我得到一个错误的陈述,我想要显示一个messagebox,告诉用户填写它们。

我正在尝试理解如何使用不同的类,现在我想在那里进行评估,并将真或假的结果返回给Form1.cs
目前它不会返回任何东西。

我是否还应将control objControl = new control();移到createProject_Click之外?

我有2个文件:

Form1.cs 如下所示:

public void createProject_Click(object sender, EventArgs e)
{
    sChoosedOfferPath = comboBoxOfferPath.Text;

    control objControl = new control();

    if (objControl.controlProject())
    {
        MessageBox.Show("ths is true");
    }
}

我的 control.cs 如下所示:

public class control : Form1
{

    public bool controlProject()
    {
        //See if the user have choosen a radiobutton
        if (rBtn101.Checked == false && rBtn102.Checked == false && rBtn103.Checked == false && rBtn104.Checked == false && rBtn206.Checked == false && rBtn306.Checked == false)
        {
            return false;
        }

        //See if the user has filled all textboxes
        if ((String.IsNullOrWhiteSpace(textBoxProjectname.Text)) || (String.IsNullOrWhiteSpace(textBoxClient.Text)) || (String.IsNullOrWhiteSpace(textBoxProjectnr.Text)))
        {
            return false;
        }

        return true;
    }
}

内部Form1.Designer.cs我已经完成了所有textboxesradiobuttons public

3 个答案:

答案 0 :(得分:2)

由于问题是以某种方式提出的新手程序员,我想以不同的方式猜测问题的含义(这可能是错误的)。

在第一段代码中,Form启动了一个Control类的新实例,它继承自Form1。

在第二段代码中,我觉得程序员希望从创建控制器对象的Form实例中检索按钮等的状态

对控制器类有一些评论但不幸的是它不是英文的,我无法理解它。

回到主要问题,因为你继承了Form,你在控制器中访问的所有状态就像“Another World”,它们现在都独立于你在屏幕上点击的Form。 (实际上你可以打电话来表明那个表格,你可以看到两个单独的表格)

如果要访问要单击的原始表单的状态,则应将该实例传递给控制器​​类而不是从其继承

我是Stack Overflow的新手,我正在尽我所能获得一个代码片段来表明我的想法。我稍后会以某种方式编辑它,我很抱歉。

编辑:请尝试以下代码。谢谢。

public class Control
{
  private Form1 mainForm;
  public Control(Form1 form)
  {
    mainForm = form;
  }
  public bool ControlProject()
  {
    if (mainForm.rBtn101.Checked == false && mainForm.rBtn102.Checked == false && mainForm.rBtn103.Checked == false && mainForm.rBtn104.Checked == false && mainForm.rBtn206.Checked == false && mainForm.rBtn306.Checked == false)
      return false;
    if ((String.IsNullOrWhiteSpace(mainForm.textBoxProjectname.Text)) || (String.IsNullOrWhiteSpace(mainForm.textBoxClient.Text)) || (String.IsNullOrWhiteSpace(mainForm.textBoxProjectnr.Text))
      return false;
    return true;
  }
}

答案 1 :(得分:1)

  

如果我收到错误陈述,我想显示一个消息框,告诉用户填写它们。

我认为这是createProject_Click()Form1方法内的消息框部分。 根据您引用的描述,看起来您的测试方式错误,您需要测试 not true 以显示消息框:

if (!objControl.controlProject())
{
    MessageBox.Show("You need to fill out the controls");
}

答案 2 :(得分:0)

好的,您的代码存在一些问题:

public void createProject_Click(object sender, EventArgs e)
{
    sChoosedOfferPath = comboBoxOfferPath.Text;

    control objControl = new control();

    if (objControl.controlProject())
    {
        MessageBox.Show("ths is true");
    }
}
  1. 每次按下此按钮时都会实例化控件的新实例 - 新实例将具有默认值。我认为这不是您的意图,而是应该引用页面上已有的控件实例。

  2. 你还没有说明这是winforms还是asp.net - 如果asp.net messagebox.show不是这里的方式,因为它会显示在服务器上!