0

我知道这是一个非常常见的问题,我的问题是我尝试了几种方法,但没有一种方法对我有用。

我有两种形式,我需要的是在一个形式上按下按钮以将我的第二个形式上的按钮的启用属性设置为 true。

正如我所说,我已经尝试了多种方法,但到目前为止都没有奏效。

4

4 回答 4

3

让我们将您的表单称为Form AForm B

Form A是否包含Form B的实例?它是否调用FormB.Show()

如果是这样,您可以在Form B中创建一个事件,并让Form A监听它。

如果没有,您仍然在Form B中创建事件,但是您有任何称为Form B的东西来监听它,然后将消息传递给Form A

把它放在Form 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();
}

来源:

http://darin.hoover.fm/code/dl/FormEvents.zip

于 2012-04-19T07:52:39.343 回答
1

您可以在第二种形式的 PUBLIC 上创建一个按钮(您可以在 *cs 文件中或从 VS 中控件的“属性”窗口执行此操作)并将第二种形式的实例添加到第一个形式中。或者您可以以第二种形式声明一些委托,以更改按钮属性,并在第一种形式中调用它。实际上还有更多变体,我刚刚提到了 2 :)

于 2012-04-19T07:29:26.507 回答
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();
        }
    }

希望能帮助到你

于 2012-04-19T07:48:15.397 回答
0

这闻起来像家庭作业。您需要让 2 种表格相互了解。通过将实例添加到一个表单,或者让第三个对象控制这两个表单。您可以多次注册按钮单击事件。(即您可以让 5 个表单监听 1 个表单按钮单击,并且所有 5 个表单的反应可能不同)。这样,您可以让按钮单击影响其自己的表单,并且第二个表单也可以注册到事件并根据需要将其自己的按钮启用为真/假。例子:

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;
    }
}
于 2012-04-19T08:11:40.217 回答