0

フォーム名をデータベースに保存しました。これらの名前を使用してフォームをロードしたいと思います。これが私のテーブル構造です:

frmID, Item_Name, formName

これが私のコードです:

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        //TreeNode node = treeView1.SelectedNode;
        string item = Convert.ToString(treeView1.SelectedNode);

        int index = item.IndexOf(" ");
        if (index > 0)
            item = item.Substring(index + 1); 
        //MessageBox.Show(item);
        var selectedFRM = from Menu in dbdata.Menus
                          where Menu.Item_Name == item
                          select Menu;
        foreach (var pick in selectedFRM.Take(1))
        {
            string sel = pick.Form_Name;
            Assembly asm = typeof(Form).Assembly;
            Type type = asm.GetType(sel);

            string df = Convert.ToString(type);
            MessageBox.Show(df);
            AssemblyName assemName = asm.GetName();
            MessageBox.Show(assemName.Name);
            try
            {
            Form frmChk = (Form)Activator.CreateInstance(type);                
                frmChk.Show();
            }
            catch (Exception)
            {
                MessageBox.Show("Error in loading form");
            }
           // MessageBox.Show(sel);
        }

uptoAssembly asm = typeof(Form).Assembly;コードは正常に動作しています。データベースにある「formName」を使用してフォームをロードするにはどうすればよいですか

4

2 に答える 2

5

これが問題だと思います:

Assembly asm = typeof(Form).Assembly;
Type type = asm.GetType(sel);

そのアセンブリはアセンブリになります-明らか特定のフォームSystem.Windows.Formsは含まれません。次の代わりに、適切なアセンブリにあることがわかっている任意のフォームを使用してください。Form

// Or whatever you know about, of course...
Assembly asm = typeof(LoginForm).Assembly;

名前は、名前空間で修飾された名前である必要があることに注意してください。

もう 1 つの (より柔軟な) 代替手段は、を介して取得できる型のアセンブリ修飾Type.AssemblyQualifiedName名を格納することです。Type.GetType(aqName)これは、フォームを複数のアセンブリに分割してもコードが機能することを意味します。

于 2012-07-07T08:09:43.513 に答える
0

解決策を見つけました。Type type = asm.GetType(sel);行はこのように修正する必要があります。

Type type = asm.GetType("WindowsFormsApplication6." + sel);

つまり

Type type = asm.GetType("Namespace.Class");
于 2012-07-08T13:00:36.613 に答える