C# I';我已将表单名称存储在数据库中。现在我想使用这些名称加载表单
我已将表单名称存储在数据库中。现在我想使用这些名称加载表单。 以下是我的表格结构:C# I';我已将表单名称存储在数据库中。现在我想使用这些名称加载表单,c#,C#,我已将表单名称存储在数据库中。现在我想使用这些名称加载表单。 以下是我的表格结构: frmID, Item_Name, formName 这是我的密码: private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { //TreeNode node = treeView1.SelectedNode; string item = Convert.ToString(tr
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);
}
最多
Assembly asm=typeof(Form).Assembly代码>代码工作正常。如何使用数据库中的“formName”加载表单我怀疑这就是问题所在:
Assembly asm = typeof(Form).Assembly;
Type type = asm.GetType(sel);
该程序集将是System.Windows.Forms
程序集-它显然不包括您的特定表单。只需使用您知道在正确程序集中的任何表单,而不是表单
:
// Or whatever you know about, of course...
Assembly asm = typeof(LoginForm).Assembly;
请注意,名称仍然需要是命名空间限定名称
另一种(更灵活的)替代方法是存储类型的程序集限定名称,您可以通过以下方式获得该名称。然后您可以只使用Type.GetType(aqName)
——这意味着如果您将表单拆分到多个程序集,那么您的代码仍然可以工作。我想这就是问题所在:
Assembly asm = typeof(Form).Assembly;
Type type = asm.GetType(sel);
该程序集将是System.Windows.Forms
程序集-它显然不包括您的特定表单。只需使用您知道在正确程序集中的任何表单,而不是表单
:
// Or whatever you know about, of course...
Assembly asm = typeof(LoginForm).Assembly;
请注意,名称仍然需要是命名空间限定名称
另一种(更灵活的)替代方法是存储类型的程序集限定名称,您可以通过以下方式获得该名称。然后您可以只使用Type.GetType(aqName)
——这意味着如果您将表单拆分到多个程序集,您的代码仍然可以工作。我找到了解决方案。Type-Type=asm.GetType(sel)代码>行应该这样更正
Type type = asm.GetType("WindowsFormsApplication6." + sel);
这意味着
Type type = asm.GetType("Namespace.Class");
我找到了解决办法。Type-Type=asm.GetType(sel)代码>行应该这样更正
Type type = asm.GetType("WindowsFormsApplication6." + sel);
这意味着
Type type = asm.GetType("Namespace.Class");
你需要重新格式化你的问题,使它更容易阅读。你还需要问一个实际的问题。你已经说了它的作用有多大,但没有说它不起作用时会发生什么……你需要重新格式化你的问题,使其更容易阅读。你还需要问一个实际的问题。您已经说过它工作了多远,但没有说它不工作时会发生什么……那么,如果没有“Type Type=asm.GetType(sel);“我如何创建表单的Instance并加载它?”我如何加载该foarm?@user1508417:不清楚您的意思。如果可以使用已知类型找到正确的程序集,那么您仍然使用asm.GetType(…)
,或者使用type.GetType()
而不是assembly.GetType
。实际上,我想要的是使用数据库加载特定的表单。在这个代码中,我不能这样做。那我该怎么做呢?表格字段是formName。(我还强烈建议您遵循.NET命名约定,并使您的类型名称更具描述性-例如,DisplayEmployeeForm
)那么,如果没有“type type=asm.GetType(sel);“我如何创建表单的Instance并加载它?”我如何加载该FOARM?user1508417:不清楚您的意思。如果可以使用已知类型找到正确的程序集,那么您仍然使用asm.GetType(…)
,或者使用type.GetType()
而不是assembly.GetType
。实际上,我想要的是使用数据库加载特定的表单。在这个代码中,我不能这样做。那我该怎么做呢?表格字段是formName。(我还强烈建议您遵循.NET命名约定,并使类型名称更具描述性-例如,DisplayEmployeeForm
)