私はこれが非常に一般的な質問であることを知っています、私の問題は私がいくつかの方法を試しましたが、どれも私のために働いていないということです。
私が持っているのは2つのフォームで、必要なのは1つのフォームでボタンを押して、2番目のフォームのボタンの有効なプロパティをtrueに設定することです。
私が言うように、私は複数の方法を試しましたが、これまでのところどれもうまくいきませんでした。
フォームを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();
}
ソース:
2番目のフォームPUBLICでボタンを作成し(* csファイルで、またはVSのコントロールの「プロパティ」ウィンドウからボタンを作成できます)、2番目のフォームのインスタンスを最初のフォームに追加できます。または、2番目の形式でデリゲートを宣言して、ボタンのプロパティを変更し、最初の形式で呼び出すことができます。実際にはもっと多くの変種があります、ちょうど言及された2 :)
ボタンを有効にする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();
}
}
それが役に立てば幸い
これは宿題の匂いがします。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;
}
}