我知道这是一个非常常见的问题,我的问题是我尝试了几种方法,而且没有一种方法适用于我。
我所拥有的是两种形式,我需要的是在一个表格上按下按钮,将第二个表格上按钮的启用属性设置为真。
正如我所说,我已经尝试了多种方法,到目前为止还没有一种方法。
答案 0 :(得分:3)
我们打电话给你的表格表格A 和表格B 。
表单A 是否包含表单B 的实例?它是否称为 FormB.Show()?
如果是,您可以在表单B 中创建一个事件,并让表单A 监听它。
如果没有,您仍然可以在表单B 中创建活动,但是您有任何名为表单B 的内容,请听取它,然后将消息传递给< strong>表格A
将其放入表格B :
public delegate void ClickButton();
public event ClickButton ButtonWasClicked;
单击该按钮时,调用ButtonWasClicked();
private void button1_Click(object sender, EventArgs e)
{
ButtonWasClicked();
}
将其放入表单A :
private FormB formB;
public FormA()
{
InitializeComponent();
formB = new FormB();
formB.ButtonWasClicked += new FormB.ClickButton(formB_ButtonWasClicked);
}
void formB_ButtonWasClicked()
{
label1.Text = "Button was clicked: " + DateTime.Now.ToString();
}
来源:
答案 1 :(得分:1)
您可以在第二个表单PUBLIC上创建一个按钮(您可以在* cs文件中或在VS中的控件的“属性”窗口中执行此操作)并将第二个表单的实例添加到第一个表单。或者,您可以在第二种形式中声明一些delegate,以更改按钮属性,并在第一种形式中调用它。 实际上还有更多变种,我刚刚提到2:)
答案 2 :(得分:1)
您应该在第二种形式中创建一个启用按钮的公共方法,并在第一种形式中添加对第二种形式的引用。然后,在OnClick事件上调用该方法。
这是我创建的示例代码:
的Class1.cs
class Class1
{
Form2 form2 = new Form2();
Form1 form1;
public Class1()
{
//Application.Run(form1);
//Application.Run(form2);
form1 = new Form1(form2);
form1.ShowDialog();
}
}
Form2.cs
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void enableB()
{
button1.Enabled = true;
}
}
Form1.cs的
public partial class Form1 : Form
{
Form2 f2;
public Form1(Form2 f)
{
InitializeComponent();
f2 = f;
f2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
f2.enableB();
}
}
希望有所帮助
答案 3 :(得分:0)
这闻起来像家庭作业。 您需要了解彼此的2个表格。通过将实例添加到一个表单,或者让第三个对象控制两个表单。您可以多次注册按钮单击事件。 (即你可以有5个表格听1个表单按钮点击,所有5个表单可能有不同的反应)。这样,您可以让按钮单击影响其自己的表单,第二个表单也可以注册到事件,并根据需要将其自己的按钮设置为true / false。 例如:
public class MyForm : Form
{
MyOtherForm OtherForm;
public MyForm()
{
InitializeComponent();
OtherForm = new MyOtherForm();
OtherForm.ButtonINeedToListenFor.Click += new EventHandler(ButtonINeedToListenFor_Click);
}
void ButtonINeedToListenFor_Click(object sender, EventArgs e)
{
this.MyDependingButton.Enabled = false;
}
}