当前位置:编程学习 > C#/ASP.NET >>

动态打开窗口问题

string qq="login";

login f = new login();
f.MdiParent = this;
f.Show();

怎么样才可以让login f = new login();代入我定义的那个新窗口名呢,或者是其他方法可以动态传给他的。
谢谢了,我写桌面新手来的,也穷,没什么分。 --------------------编程问答-------------------- 各位同学不介意我自己顶一下吧 --------------------编程问答-------------------- 如果是在将“login"显示在窗口标題
Form f=new Form();
f.Text="login";
f.Show();
不知是这个意思吗? --------------------编程问答-------------------- 说实话,我真没看懂表达的意思,不过楼上应该是正解
--------------------编程问答-------------------- 对于大家来说这是简单的问题,我不懂 --------------------编程问答-------------------- 不是啊。
我来解释一下
string qq="login"; //我自己想动态定义从数据库里取值出来,有可能是要打开login或是qqmail之类的新窗口

login f = new login(); //这里的login是新要打开的一个窗口这页的名就login
f.MdiParent = this; 
f.Show();

不知我这样描述大家明白了没有 --------------------编程问答-------------------- 是没有看懂你的描述,你能重新描述下就好了 --------------------编程问答-------------------- 我5楼的那个描述应该很明白吧 --------------------编程问答-------------------- 或者哪位同学加我QQ了解一下 --------------------编程问答-------------------- 恩,我回帖的时候没刷新页面,没看到 --------------------编程问答-------------------- 我Q261805 --------------------编程问答-------------------- 这下大概懂了,希望从字符串转换成类, 基本不可能

只有用switch判断,也是写死的一种

要不然在数据库存序列化的类,反序列化出来 --------------------编程问答-------------------- 我觉得应该可以,或者是其他的不同的方法。
比如我的菜单都是从数据库取出来的这肯定要动态的加载才玩的通,C#应该不是这么差吧。
--------------------编程问答-------------------- 你的意思是動態創建對象是不?通過從數據庫中讀取值,通過這個值創建相關對象???
如果是的話,用把射,不是的話,我就還沒理解你的意思,不好意思! --------------------编程问答-------------------- 动态加载只有用反射 --------------------编程问答-------------------- 反射怎么用呢,有没有小小的实例可供学习一下 --------------------编程问答--------------------
引用 13 楼 zhantianyou 的回复:
你的意思是動態創建對象是不?通過從數據庫中讀取值,通過這個值創建相關對象??? 
如果是的話,用把射,不是的話,我就還沒理解你的意思,不好意思!

我就是要实现5楼那样描述的功能啊。 --------------------编程问答-------------------- 没有那么复杂吧,
只要给login类加一个属性不就可以了吗?

public string qq {get;set;};

在重载一个构造函数

public login(string qq)
{
this.qq=qq;

} --------------------编程问答-------------------- namespace MyLibrary
{
public class Class2
{
public int def;
string  mstrName;

public string Name
{
get
{
return mstrName;
}
set
{
mstrName=value;
}
}

}


public class Class3
{

public int ghi;


int mint;


public void Walk(int Distance)
{
mint += Distance;
}

}

public class Class4
{
public  int jkl;
}

}

这里面包括四个类,每个类有不同的成员,把它编译成DLL文件。

现在再做一个Windows项目:

 

首先把MyLibrary.dll拷贝到当前目录下。代码:

//对公共语言运行库中的模块执行反射操作

private void button1_Click(object sender, System.EventArgs e)
{
//我们现在要知道原始的基类Object的情况
object b=new object();

//定义一个公共语言运行库的构造块:Assembly(装配)
System.Reflection.Assembly a;

//通过Module.Assembly使模块执行反射操作
//说明:
//b.GetType()为获取对象b的类型
            //Module为获取已经定义类型的模块(DLL)
//Assembly为这个模块获取适当的Assembly

a= (b.GetType()).Module.Assembly;

int numInterfaces= 0;
int numClasses= 0;
int numArrays=0;
int numValueTypes=0;

listBox1.Items.Clear();

Type[] types= a.GetTypes();
 


for(int i=0;i<types.Length;i++)
{
if (types[i].IsClass) 
{
numClasses++;
listBox1.Items.Add(types[i].Name + "'");
}

//  listBox1.Items.Add("类"+i.ToString()+" "+types[i].FullName); // 类型不多,所以我们可以将它们全部输出
                
if (types[i].IsValueType) numValueTypes++;
            
if (types[i].IsArray) numArrays++;

if (types[i].IsInterface)
{
listBox1.Items.Add(types[i].Name + "'");   // 仅输出接口的名称
numInterfaces ++;
}

}
listBox1.Items.Add("类总数="+numClasses.ToString());
listBox1.Items.Add("接口总数="+numInterfaces.ToString());
listBox1.Items.Add("数据类型总数="+numValueTypes.ToString());
listBox1.Items.Add("数组总数="+numArrays.ToString());

}

//对独立的模块文件执行反射操作
private void button2_Click(object sender, System.EventArgs e)
{

//我们现在要知道MyLibrary.dll的情况

System.Reflection.Assembly a;

//通过调入文件执行反射操作

a=System. Reflection.Assembly.LoadFrom("MyLibrary.dll");

Type[] types= a.GetTypes();
listBox1.Items.Clear();


for(int i=0;i<types.Length;i++)
{
listBox1.Items.Add("类"+i.ToString()+" "+types[i].FullName); // 类型不多,所以我们可以将它们全部输出
                
//FieldInfo发现字段特性并提供字段元数据的访问权
System.Reflection.FieldInfo[] fi;
fi = types[i].GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);
for(int j=0;j<fi.Length;j++)
{
listBox1.Items.Add(fi[j].Name);
}

             //注释掉的部分为显示方法

/*
//MethodInfo发现方法特性并提供方法的访问权
System.Reflection.MethodInfo[] Mfi;
Mfi = types[i].GetMethods(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);
for(int j=0;j<Mfi.Length;j++)
{
listBox1.Items.Add(Mfi[j].Name);
}
*/


}


}
--------------------编程问答-------------------- 把你的email地址发出来吧!给你一个反射的资料。 --------------------编程问答-------------------- 我邮件webcool@qq.com,谢谢各位啊。 --------------------编程问答--------------------
引用 17 楼 liuxingzi001 的回复:
没有那么复杂吧, 
只要给login类加一个属性不就可以了吗? 

public string qq {get;set;}; 

在重载一个构造函数 

public login(string qq) 

this.qq=qq; 

}


{get;set;}; 这东东是不是只有VS08才有的啊,我的05编译会报错啊 --------------------编程问答-------------------- 17楼没看懂你的意思。
你想的是,读取一个字符串,可以直接获取对应名字的类的实例。
这个不可能,唯一方法是把这个新form放在一个dll里,然后动态读取,获得这个类。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,