@Tamas Szaboと@ Danish_k12が書いたように、2番目のフォームにパブリックプロパティを追加する必要があります。ロードボタンをクリックして、新しいフォーム2を初期化します。チェックボックスがオンになっていることを確認し、それに応じて2番目のフォームに追加するパブリックプロパティを設定します。次に、2番目のフォームのLoadイベントで、追加したパブリックプロパティの値に応じて、1番目または2番目のグラフを表示します。ここ は、あなたがこれを達成する方法である。
をForm1 - Form2のプライベートフィールドとして
namespace WindowsFormsApplication3
{
using System;
using System.Windows.Forms;
public partial class Form1 : Form
{
private Form2 form2;
public Form1()
{
this.InitializeComponent();
this.button_Load.Click += Button_Load_Click;
}
private void Button_Load_Click(object sender, EventArgs e)
{
if(this.form2 != null)
this.form2.Dispose();
this.form2 = new Form2();
if(this.checkBox1.Checked == true)
{
this.form2.IndexOfGraphToShow = 1;
}
if(this.checkBox2.Checked == true)
{
this.form2.IndexOfGraphToShow = 2;
}
if(this.form2.IndexOfGraphToShow == 1 || this.form2.IndexOfGraphToShow == 2)
{
this.form2.Show();
return;
}
MessageBox.Show("Select which graph to show", "Choose graph", MessageBoxButtons.OK, MessageBoxIcon.Error);
form2.Dispose();
}
}
}
のForm2:
namespace WindowsFormsApplication3
{
using System;
using System.Windows.Forms;
public partial class Form2 : Form
{
public Form2()
{
this.InitializeComponent();
this.Load += Form2_Load;
}
public int IndexOfGraphToShow { get; set; }
private void Form2_Load(object sender, EventArgs e)
{
if(this.IndexOfGraphToShow == 1)
{
// TODO: Show first graph
}
else if(this.IndexOfGraphToShow == 2)
{
// TODO: Show second graph
}
}
}
}
もう一つ。両方のチェックボックスをチェックできるので、両方のグラフィックを一度に表示できる場合のみ、ケース内のチェックボックスを使用することは良いオプションです。 1つのグラフだけを表示する場合は、オプションセットの使用を検討してください。
ボタンをクリックするたびに新しいフォームを表示するには、表示されたフォームをプライベートフィールドに保存します。ボタンがクリックされたときにフィールドがnullでないかどうかを確認します。そうであれば、古いフォームを破棄して新しいフォームを作成します。あなたは、このような第二のフォームを表示するときにShowDialog代わりの表示の使用も検討すること
:
this.form2.ShowDialog();
これは、ダイアログウィンドウとユーザーが作成されますが最初のフォームのボタンに到達することができません2番目のフォームが開いている限り。
ご協力いただきありがとうございます。 – SNP
@ wnvko。あなたのコードは大変ありがとうございます。それは機能しますが、フォーム2は2回出現します。私には解決策を教えてください。ありがとうございます。 – SNP
私は自分の答えを更新しました。これで1つのフォームのみが表示されます。ショーの代わりにShowDialogを使用して、フォーム – wnvko