0

私はこれが非常に一般的な質問であることを知っています、私の問題は私がいくつかの方法を試しましたが、どれも私のために働いていないということです。

私が持っているのは2つのフォームで、必要なのは1つのフォームでボタンを押して、2番目のフォームのボタンの有効なプロパティをtrueに設定することです。

私が言うように、私は複数の方法を試しましたが、これまでのところどれもうまくいきませんでした。

4

4 に答える 4

3

フォームをForm AおよびForm Bと呼びましょう。

フォーム Aにはフォーム Bのインスタンスが含まれていますか? FormB.Show()を呼び出しますか?

その場合は、フォーム Bでイベントを作成し、フォーム 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

2番目のフォームPUBLICでボタンを作成し(* csファイルで、またはVSのコントロールの「プロパティ」ウィンドウからボタンを作成できます)、2番目のフォームのインスタンスを最初のフォームに追加できます。または、2番目の形式でデリゲートを宣言して、ボタンのプロパティを変更し、最初の形式で呼び出すことができます。実際にはもっと多くの変種があります、ちょうど言及された2 :)

于 2012-04-19T07:29:26.507 に答える
1

ボタンを有効にする2番目のフォームにパブリックメソッドを作成し、最初のフォームの2番目のフォームへの参照を追加する必要があります。次に、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 つのフォームがお互いを認識している必要があります。インスタンスを 1 つのフォームに追加するか、3 番目のオブジェクトで両方のフォームを制御します。ボタン クリック イベントには複数回登録できます。(つまり、1 つのフォーム ボタン クリックをリッスンする 5 つのフォームを持つことができ、5 つのフォームすべてが異なる反応を示す可能性があります)。このようにして、ボタンのクリックを独自のフォームに影響を与えることができ、2 番目のフォームもイベントに登録し、必要に応じて独自のボタンを 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;
    }
}
于 2012-04-19T08:11:40.217 に答える