0

データを表示するためにポップアップする子がいます。

ただし、データが変更されると、新しいデータを表示するために新しいフォームが作成されます。

古いフォームを閉じたいので、データが変更されるたびに 5000 フォームにならないようにします。

新しいフォームが作成される理由は、その名前にデータの ID を表示できるようにするためです。

私のコード:

String Pass; // used to get value from class and pass it to next form.

public void ShowNewCompareDiff() //object sender, EventArgs e
{
    FormCompareDiff childForm = new FormCompareDiff(Pass);
    childForm.MdiParent = MdiParent;
    childForm.Text = "Comepare difference ";

    //childForm.Close(); //Not working 
    //childForm = null; //Not working

    childForm.Show();
}

private void dataGridViewResult_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    CompareXML Com = new CompareXML();
    Pass = Com.Compare(richTextBoxSQL.Text, richTextBoxPrevSQL.Text);
    ShowNewCompareDiff();
}

子フォーム FormCompareDiff:

namespace AuditIT_1
{
    public partial class FormCompareDiff : Form
    {
        String Passed;
        public FormCompareDiff(String Pass)
        {
            Passed = Pass;
            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
            this.Location = new System.Drawing.Point(836, 0); // Form Shows next to FormSchemaSearch
            InitializeComponent();
        }
        private void FormCompareDiff_Load(object sender, EventArgs e)
        {
            String Pass = Passed;
            CompareXML Com = new CompareXML();
            webBrowserDifferences.DocumentText = Com.ResultShow(Pass);
        }       
    }    
}
4

3 に答える 3

1

子フォームの寿命を明示的に追跡する必要があります。また、コンストラクター引数の代わりにプロパティを使用して、新しい子を作成する代わりに子を更新できるようにします。このような:

FormCompareDiff childForm;

public void ShowNewCompareDiff()
{
    if (childForm != null) {
        childForm.WindowState = FormWindowState.Normal;
    }
    else {
        childForm = new FormCompareDiff();
        childForm.MdiParent = MdiParent;
        childForm.FormClosed += delegate { childForm = null; };
    }
    childForm.Pass = Pass;
    childForm.Show();
}

パブリック Pass プロパティを FormCompareDiff に追加することを忘れないでください。

于 2012-06-12T07:10:55.977 に答える
0

ShowNewCompareDiff() メソッドで FormCompareDiff フォーム オブジェクトを作成し、それをメイン フォームのプロパティとして保持すると、データが変更されるたびに同じフォームの Text を更新できます。それ。

編集

public void ShowNewCompareDiff(Form formToClose) 
{
    FormCompareDiff childForm = new FormCompareDiff(Pass);
    childForm.MdiParent = MdiParent;
    childForm.Text = "Comepare difference ";
    childForm.Show();
    formToClose.Close(); // close the form you want
}

このメソッドを次のように呼び出します

ShowNewCompareDiff(this);
于 2012-06-12T06:52:59.490 に答える