ShowDialogメソッドを使用して開くフォームがあります。このフォームには、Moreというボタンがあります。 [もっと見る]をクリックすると、別のフォームが開き、現在のフォームが閉じます。
more ButtonのClickイベントハンドラーで次のコードを記述しました
MoreActions objUI = new MoreActions ();
objUI.ShowDialog();
this.Close();
しかし、起こっているのは、最初のフォームを閉じているわけではありません。だから、私はこのコードを
MoreActions objUI = new MoreActions ();
objUI.Show();
this.Close();
ここで、2番目のフォームが表示され、数秒以内に両方のフォームが閉じられます。
誰でも私が問題を解決するのを助けてくれますか?私がする必要があるのは、[その他のボタン]をクリックすると、別のフォームを開いて最初のフォームを閉じることです。
どんな種類の助けも私にとって本当に役立つでしょう。
私の意見では、メインフォームは両方の子フォームを開く責任があります。ここに、私が何をするかを説明するいくつかの擬似があります:
// MainForm
private ChildForm childForm;
private MoreForm moreForm;
ButtonThatOpenTheFirstChildForm_Click()
{
childForm = CreateTheChildForm();
childForm.MoreClick += More_Click;
childForm.Show();
}
More_Click()
{
childForm.Close();
moreForm = new MoreForm();
moreForm.Show();
}
最初の子で単純なイベントMoreClickを作成する必要があります。このアプローチの主な利点は、必要に応じて複製できることと、ある種の基本的なワークフローを非常に簡単にモデル化できることです。
あなたが正しかったなら、あなたはこのようにしようとしていますか?
これに?
Form1で、ボタンにこのイベントを追加します。
// button event in your Form1
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog(); // Shows Form2
}
次に、Form2でボタンに次のイベントも追加します。
// button event in your Form2
private void button1_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3(); // Instantiate a Form3 object.
f3.Show(); // Show Form3 and
this.Close(); // closes the Form2 instance.
}
わかりましたので、私はこれを使用しました:
public partial class Form1 : Form
{
private void Button_Click(object sender, EventArgs e)
{
Form2 myForm = new Form2();
this.Hide();
myForm.ShowDialog();
this.Close();
}
}
これは正常に機能しているようですが、最初のフォームは非表示になっているだけで、イベントを生成できます。最初のフォームを閉じるには「this.Close()」が必要ですが、フォームを実行したい場合(ランチャーのように振る舞わない場合)は、次のように置き換える必要があります。
this.Show();
幸運を祈ります!
最初のダイアログを閉じてさらにボタンを押すと設定される値を使用し、元のフォームで値をテストしてから、そこにダイアログを表示します。
元の
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool DrawText = false;
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.ShowDialog();
if (f2.ShowMoreActions)
{
Form3 f3 = new Form3();
f3.ShowDialog();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public bool ShowMoreActions = false;
private void button1_Click(object sender, EventArgs e)
{
ShowMoreActions = true;
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
これを試して..
//button1 will be clicked to open a new form
private void button1_Click(object sender, EventArgs e)
{
this.Visible = false; // this = is the current form
SignUp s = new SignUp(); //SignUp is the name of my other form
s.Visible = true;
}
あなたはこの例を検討するかもしれません
//Form1 Window
//EventHandler
Form1 frm2 = new Form1();
{
frm2.Show(this); //this will show Form2
frm1.Hide(); //this Form will hide
}
たとえば、Button1
という名前のButton
があります。最初にクリックすると、Button2
のEventHandler
が開き、別のForm
を呼び出して、次のコードをボタンに書き込む必要があります。
your name example=form2.
form2 obj=new form2();
obj.show();
Form1を閉じるには、次のコードを記述します。
form1.visible=false;
またはform1.Hide();
Boolを追加して、ボタンがいつアクティブになったかをアルゴリズムが認識できるようにすることができます。クリックされると、boolはtrueをチェックし、新しいフォームが表示され、最後のフォームが閉じられます。
フォームはラムを消費する(少なくとも少し)ことを知っておくことが重要です。そのため、使用しないものを非表示にするのではなく、閉じることをお勧めします。大きなプロジェクトに違いをもたらします。