对不起,我是C#初学者
我正在尝试在表单4上创建一个按钮,该按钮将更改表单3中对象的属性。
这种情况下,每次按下表格4上的按钮1时,表格3上的标签都会显示"您按下按钮1",按钮2上的相同内容。
我在表格4上添加了这个。
public partial class Form4 : Form
{
public bool buttonchecked;
private void button1_Click_1(object sender, EventArgs e)
{
buttonchecked = true;
}
private void button2_Click_1(object sender, EventArgs e)
{
buttonchecked = false;
}
这就是我在表格3上的内容:
public void label2_Click(object sender, EventArgs e)
{
Form4 form4 = new Form4(); //add
if (form4.buttonchecked == true)
{
label2.Text = "You pressed button 1";
}
else
{
label2.Text = "You pressed button2";
我的label2文本始终设置为"您按下了button2"但我没有
我添加了一个关闭当前表单的代码并打开另一个表单,这可能会导致问题?
这是来自表格3
this.Hide();
Form4 f4 = new Form4();
f4.ShowDialog();
这是来自表格4
this.Hide();
Form3 frm3 = new Form3();
frm3.ShowDialog();
我做错了什么事吗?
答案 0 :(得分:1)
您的代码存在一些问题:
在Form3上,为什么要处理label2_click按钮?单击标签时会触发此事件。如果标签的Text
属性为空字符串,您甚至不会看到标签以便能够点击它。
此代码:
Form4 form4 = new Form4();
if (form4.buttonchecked == true)
// etc
在逻辑上不正确,因为您正在创建一个Form4实例,然后您正在检查它的公共字段(buttonchecked
)的值而不显示表单。默认值布尔变量为false,因此控件将始终命中 else 分支。这就是你总是收到"You pressed button2"
消息的原因。
使用您的代码执行此操作的一种正确方法如下:
在 Form3 :
上var form4 = new Form4();
var result = form4.ShowDialog();
if (result == DialogResult.OK)
{
label2.Text = "You pressed button 1";
}
else
{
label2.Text = "You pressed button 2";
}
在 Form4 :
上public partial class Form4 : Form
{
public bool buttonchecked;
private void button1_Click_1(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
}
private void button2_Click_1(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
}
ShowDialog()方法将显示Form4并将阻止Form3执行。在Form4上,根据您按下的按钮设置DialogResult,然后将结果返回给调用表单(Form3)。根据该结果,您可以做出决定。
该解决方案将完成这项工作,但它有一个问题:由于Dialog约束,您无法并行使用这两种形式(当您从Form3打开Form4时,您必须关闭它才能到达Form3再一次,你不能同时玩这两个)。
所以这是一个解决这个问题的新(干净)解决方案:
在Designer模式下的Form3上,单击label2 - >属性 - >修饰符 - >上市。通过这种方式,您可以从其他表单访问label2。
在Form4上,放置以下代码:
public partial class Form4 : Form
{
private void button1_Click_1(object sender, EventArgs e)
{
var form3 = Application.OpenForms["Form3"];
form3.label2.Text = "You pressed button 1";
}
private void button2_Click_1(object sender, EventArgs e)
{
var form3 = Application.OpenForms["Form3"];
form3.label2.Text = "You pressed button 2";
}
}
注意:在该解决方案上,Form3需要在之前打开,否则Application.OpenForms["Form3"]
将返回null或者它将引发异常。
如果您有任何其他问题,请随时发表评论。