2

いくつかの異なるクリック イベントに同じコードを使用し始めていることがわかりました。私は MDI フォームを持っており、マスターに関連付けられた他の子を開く「マスターの子」と呼んでいます。これは進行中のマスター/詳細です。たとえば、Company マスターの子には、Company に関連付けられた Contact、Industry などを開くためのボタンがあります。以下は、Contact 子フォームを開くコードのサンプルです。このコードは、他のコードにも使用されています。

私が探しているのは、1 つだけを使用して、ボタン、フォーム、メッセージ、および Company と Contact の間の接続ラベルを入力できるようにすることです。ボタンのコードは私がこれまでに持っていたもので、探しているもので変更する必要がある行をマークしました。単一矢印の線は機能しているように見えますが、複数矢印の線は正しく動作しません。比較のために両方を提供します。

誰かがこれ/これらを見て、統合されたコードで何が間違っているか (または欠落しているか) を確認できますか?

ありがとう...ジョン

//お問い合わせフォームを開くコード

        private void btnCompanyContact_Click(object sender, EventArgs e)
    {
        bool isOpen = false;

        foreach (Form f in Application.OpenForms)
        {
            if (f is frmContact)
            {
                isOpen = true;
                MessageBox.Show("The Contact list is already open.", "INFORMATION", MessageBoxButtons.OK);
                f.BringToFront();
                f.Controls["lblRecordID"].Text = lblCompanyID.Text;
                break;
            }
        }

        if (!isOpen)
        {
            frmContact contact = new frmContact();
            contact.MdiParent = this.MdiParent;
            contact.ReceiveValue(lblCompanyID.Text);
            contact.StartPosition = FormStartPosition.Manual;
            contact.Location = new Point(100, 100);
            contact.Show();
        }

        else
        {
            //do nothing
        }
    }

//すべてのボタン開口部をこのルーチンに統合する

        private void OpenCompanyInformationForm(Button btn, Form name, string message, string lbl)
    {
        bool isOpen = false;

        foreach (Form f in Application.OpenForms)
        {
  ->        if (f == name)
            {
                isOpen = true;
  ->            MessageBox.Show("The " + message + " list is already open.", "INFORMATION", MessageBoxButtons.OK);
                f.BringToFront();
  ->            f.Controls[lbl].Text = lblCompanyID.Text;
                break;
            }
        }

        if (!isOpen)
        {
   ->->->   frmContact contact = new frmContact();
            contact.MdiParent = this.MdiParent;
            contact.ReceiveValue(lblCompanyID.Text);
            contact.StartPosition = FormStartPosition.Manual;
            contact.Location = new Point(100, 100);
            contact.Show();
        }

        else
        {
            //do nothing
        }
    }
4

1 に答える 1

1

カスタム関数 ReceiveValue を実行するには、フォームから派生クラスを作成し、この派生クラスからすべてのフォームを作成する必要があります

public class ContactBase : Form
{

    public void ReceiveValue(string p_Value)
    {
        Button button = (Button)this.Controls["lblRecordID"];
        if (button == null) return;
        button.Text = p_Value;
    }

}


private void OpenCompanyInformationForm(Form name)
    {
        bool isOpen = false;

        foreach (Form f in Application.OpenForms)
        {
            // Just to compare, you can use the Name property
  ->        if (f.Name == name.Name)
            {
                isOpen = true;
                // If the message is just a name of form, you can use Name or Text property
                // in this case you can supress message param
  ->            MessageBox.Show("The " + f.Text + " list is already open.", "INFORMATION", MessageBoxButtons.OK);
                f.BringToFront();
                // If the ReceiveValue is just to pass the text of lblCompanyID for lblRecordID button, you can use the function here
  ->            ((ContactBase)name).ReceiveValue(lblCompanyID.Text);
                break;
            }
        }

        if (!isOpen)
        {
   ->->->   ContactBase contact = (ContactBase)Activator.CreateInstance(name.GetType());
            contact.MdiParent = this.MdiParent;
            contact.ReceiveValue(lblCompanyID.Text);
            contact.StartPosition = FormStartPosition.Manual;
            contact.Location = new Point(100, 100);
            contact.Show();
        }

        else
        {
            //do nothing
        }
    }
于 2013-05-08T13:14:15.080 に答える