2

form1実行時に作成されるコントロールで呼び出されるフォームがあります。

フォームのボタンを押すと、別のフォームが呼び出されて読み込まれcombatform1非表示になるため、1 つのフォーム ( combat) のみが表示されます。

ボタンを押すcombatと、form1フォームが表示されます。しかし、私はそれにアクセスできません。

これが私が試したことです:

 private void combatBtn_Click(object sender, EventArgs e)
    {
        Form combat = new Combat(this);
        this.Hide();
        combat.Show();

    }

public partial class Combat : Form
 {

    public Combat(Form form)
    {
        InitializeComponent();
        form.Show();


    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Show();
    }
}
4

3 に答える 3

4

親フォームをフィールドに格納して、コンストラクターの外部からアクセスできるようにする必要があります。

于 2013-01-14T14:55:18.143 に答える
2
public partial class Combat : Form
{

    private form1 form;    // Or whatever class you form1 is supposed to be

    public Combat(Form form)
    {
        InitializeComponent();
        this.form = form;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form.Show();
    }
}
于 2013-01-14T14:58:17.637 に答える
1

通常、親フォームのインスタンスを子フォームに渡すことはお勧めできません。この場合 (よくあることですが)、次のことをしないと、コードは実際には単純になります。

private void combatBtn_Click(object sender, EventArgs e)
{
    Form combat = new Combat();
    this.Hide();
    combat.ShowDialog();
    this.Show();
}

子フォームが閉じられる前に親フォームを表示する必要がある場合は、イベントを通じて行うことができます。

加えてCombat

public event Action MyEvent; //TODO rename to a meaningful name

ボタン クリック ハンドラーでイベントを発生させます。

private void button1_Click(object sender, EventArgs e)
{
    MyEvent();
}

次に、メイン フォームにハンドラーをイベントに追加します。

private void combatBtn_Click(object sender, EventArgs e)
{
    Combat combat = new Combat();
    this.Hide();
    combat.MyEvent += () => this.Show();
    combat.Show();
}
于 2013-01-14T15:25:40.960 に答える