使用其他表单中的复选框/按钮



有两种不同的形式。

Form1Form2

Form1有6个不同的复选框和一个按钮。

如果按下按钮,form2将打开,form1将关闭,并且特殊按钮将可见,这是您之前在复选框中选中的。

表单2上有6个按钮,但都设置为visible = false.

例如:选中复选框2和6,然后按下按钮。

Form2打开,按钮2和6可见。

但是我不能使用不同形式的复选框和按钮。我已经在设计器中将复选框和按钮设置为公共。

有人能帮忙吗?抱歉我英语不好,提前谢谢!

将此EventHandler添加到Form1:上按钮的.Click事件

//Click EventHandler for Button on Form1
private void button1_Click(object sender, EventArgs e)
{
//Create instance of Form2
Form2 f2 = new Form2();
//Check which CheckBoxes are checked
foreach(CheckBox checkbox in this.Controls.OfType<CheckBox>())
{
if (checkbox.Checked)
{
//Get number of Checkbox
string number = checkbox.Name.Replace("checkBox", string.Empty);
//Show the corresponding Button on Form2
Button button = f2.Controls.Find("button" + number, true).FirstOrDefault() as Button;
button.Visible = true;
}
}
//Show Form2
f2.Show();
//Close or hide Form1
this.Hide();
}

注意:请记住,要使CheckBoxesForm1上工作,必须调用:

复选框1、复选框2、复选框3。。。

Form2上的Buttons必须调用:

按钮1、按钮2、按钮3。。。

您还可以随时添加或删除ButtonsCheckBoxes。只要确保它们的名称正确即可。

无关注意:在提出下一个问题之前,请先看一看。欢迎来到SO!:(

我已经在设计器中将复选框和按钮设置为公共。

我认为这意味着您将Form2上按钮的Modifiers属性更改为Public?

如果是这样,那么当您从Form1创建Form2时,只需执行以下操作:

// ... from within Form1 ...
Form2 f2 = new Form2();
f2.button1.Visible = this.checkBox1.Checked;
f2.button2.Visible = this.checkBox2.Checked;
f2.button3.Visible = this.checkBox3.Checked;
f2.button4.Visible = this.checkBox4.Checked;
f2.button5.Visible = this.checkBox5.Checked;
f2.button6.Visible = this.checkBox6.Checked;
f2.Show();

正如Klemikaze在评论中提到的,一种更正确的方法是将状态传递给重载的Form2构造函数:

// ... in Form1 ...
private void button1_Click(object sender, EventArgs e)
{
bool[] checkStates = new bool[] {
checkBox1.Checked, checkBox2.Checked, checkBox3.Checked,
checkBox4.Checked, checkBox5.Checked, checkBox6.Checked
};
Form2 f2 = new Form2(checkStates);            
f2.Show();
}

然后在Form2:中

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(bool[] btnVisibleStates)
{
InitializeComponent();
for(int i=0; i<btnVisibleStates.Length; i++)
{
String btnName = "button" + (i + 1);
Button btn = this.Controls.Find(btnName, true).FirstOrDefault() as Button;
if (btn != null)
{
btn.Visible = btnVisibleStates[i];
}
}
}
}

最新更新