1

たくさんのWindowsフォームがあります。各フォームには、フォームを切り替えるための「戻る」ボタンと「次へ」ボタンがあります。たとえば、Form3で[戻る]をクリックしてから、Form2に移動します。次に、Form2の[次へ]ボタンをクリックすると、Form3が表示されます。

さて、私の質問は、最初から「次へ」をクリックすると、スムーズに動作するということです。ただし、Form3で[戻る]をクリックすると、Form2が表示され、Form3で[次へ]をクリックすると、Form3に移動します。コードはForm3_Loadイベントに移動しません。私のコードの何が問題になっていますか?

 public partial class Form3 : Form
{
    Form2 FormPrev;
    Form4 FormNext;
    List<DataRow> drlist = new List<DataRow>();
    DataTable dt = new DataTable();

    public Form3(Form2 _FormPrev)
    {
        InitializeComponent();
        this.FormPrev = _FormPrev;
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void btnNext_Click(object sender, EventArgs e)
    {
        ShowNext();
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        ShowPrev();
    }

    private void ShowNext()
    {
        if (FormNext == null)
            FormNext = new Form4(this);
        FormNext.Show();
        this.Hide();
    }

    private void ShowPrev()
    {
        FormPrev.Show();
        this.Hide();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
       // blah blah.
    }

ありがとう。

4

3 に答える 3

3

フォームのLoadイベントは、フォームが初めて呼び出されたときにのみ発生します。その後、フォームを非表示にして再表示すると、フォームが再ロードされないため、フォームのLoadイベントは発生しません。

フォームが再表示されたときにイベントを使用して処理する場合は、次のより適切なイベントを確認する必要があります。

アクティブ化された表示VisibleChanged

于 2012-05-14T13:30:48.163 に答える
1

フォームの読み込みイベントは、フォームが初めて表示される前にのみ発生します。Form ActivatedやGotFocusなど、別のイベントを使用する必要があります。

于 2012-05-14T13:29:08.093 に答える
0

これは通常の動作です。ロードはロードフォーム用であり、ショー用ではありません。あなたの場合、あなたは隠された形を見せようとします。使用したい場合

form.Show()

使用しないより

form.Hide()

しかし

form.Close()

UPD: コードは次のようになります:

public partial class Form3 : Form
{
    List<DataRow> drlist = new List<DataRow>();
    DataTable dt = new DataTable();

    public Form3()
    {
        InitializeComponent();
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void btnNext_Click(object sender, EventArgs e)
    {
        ShowNext();
    }

    private void btnBack_Click(object sender, EventArgs e)
    {
        ShowPrev();
    }

    private void ShowNext()
    {
        Form4 formNext = new Form4();
        formNext.Show();
        this.Close();
    }

    private void ShowPrev()
    {
        Form2 formPrev = new Form2();
        formPrev.Show();
        this.Close();
    }

    private void Form3_Load(object sender, EventArgs e)
    {
       // blah blah.
    }
}

しかし、そのようなcolutionsには問題があります-メインフォームを閉じてはいけません。

于 2012-05-14T13:31:52.077 に答える