0

私はmdiフォームを持っており、メインメニューには非常に多くの子フォームがあり、そのようなコードを使用して子を開きます:

        frmCustomers yeni = new frmCustomers();
        if (GenelIslemler.formAuthCheck(yeni.Name.ToString()))
        {
            if (!IsOpen(yeni.Name.ToString()))
            {
                yeni.MdiParent = this;
                yeni.WindowState = FormWindowState.Maximized;
                yeni.Show();

            }
        }
        else
        {
            MessageBox.Show("You dont have rights to access!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

しかし、私はメソッドを書き、そのメソッドにフォームを呼び出すだけです

openForm(fromCustomers);

openForm メソッドは次のようになります

openForm(フォームから) {...}

どのようにできるのか?

4

1 に答える 1

2

これは、すべての NET アプリケーションに組み込まれているリフレクション システムで機能します。

using System.Reflection;

private void openForm(string formName)
{
    // First check if this form is authorized 
    if (GenelIslemler.formAuthCheck(formName))
    {
        // Then check if is already opened
        if (!IsOpen(formName))
        {
            // And now transform that string variable in the actual form to open

            // This is the critical line. You need the fully qualified form name. 
            // namespace + classname 
            Type formType = Type.GetType ("RapunzoApps.ThisApp." + formName);
            ConstructorInfo ctorInfo = formType.GetConstructor(Type.EmptyTypes);
            Form theForm = (Form) ctorInfo.Invoke (null);
            theForm.MdiParent = this;
            theForm.WindowState = FormWindowState.Maximized;
            theForm.Show();
        }
    }
    else
    {
        MessageBox.Show("You dont have rights to access!", "uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
于 2013-04-13T09:38:47.973 に答える