我的bool和windowsforms有问题。
我有一些radiobuttons
和textboxes
。如果他们没有填补我想要返回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
我已经完成了所有textboxes
和radiobuttons
public
。
答案 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");
}
}
每次按下此按钮时都会实例化控件的新实例 - 新实例将具有默认值。我认为这不是您的意图,而是应该引用页面上已有的控件实例。
你还没有说明这是winforms还是asp.net - 如果asp.net messagebox.show不是这里的方式,因为它会显示在服务器上!