求助!!当form子窗体已经打开,并且不是位于最上层,也没有最小化,而是被最上层的窗体覆盖住了。当再次点击打开此窗体的按钮时,怎么让其显示在最上层?我现在再次点击打开时,没有反应。
例如:有两个form,分别是form1,form2,此时form1,form2都已经打开,并且form1位于form2的后面,被form2挡住,看不到了。我用button1控制form1的打开,现在再点击button1,form1不能显示在最上层,即当前画面还是form2的。前提是我有判断主窗体中若有form1,则窗体中不再打开form1。
例如:有两个form,分别是form1,form2,此时form1,form2都已经打开,并且form1位于form2的后面,被form2挡住,看不到了。我用button1控制form1的打开,现在再点击button1,form1不能显示在最上层,即当前画面还是form2的。前提是我有判断主窗体中若有form1,则窗体中不再打开form1。
{
myTopForm.TopMost = true;
}
public Form1() {
InitializeComponent();
} private Form2 f2;//子窗体
private Form3 f3;//子窗体 private void button1_Click(object sender, EventArgs e) {
if (null == f2 || f2.IsDisposed) {
f2 = new Form2();
f2.Show();
} else {
f2.Activate();
}
} private void button2_Click(object sender, EventArgs e) {
if (null == f3 || f3.IsDisposed) {
f3 = new Form3();
f3.Show();
} else {
f3.Activate();
}
}
}
f2 = new Form2();
f2.Show();
} else {
f2.Activate();
}
把这些代码封装在DLL中,等于在DLL中开放一个接口让你打开窗体。就是说某个窗体的打开由它所在的DLL进行管理
{
Form[] x = this.MdiChildren;//所有子窗体放入数组
Assembly assembly = Assembly.LoadFile(@"C:\Key\bin\Debug\" + sender.ToString().Replace(" ", "").Trim() + ".dll");
Form form = null;
form = assembly.CreateInstance("Key." + sender.ToString().Replace(" ", "").Trim()) as Form;
form.Name = sender.ToString().Replace(" ", "").Trim(); for (int i = 0; i < x.Length; i++)
{
if (x[i].Name.Trim().Equals(sender.ToString().Replace(" ", "").Trim()))
{
return;
}
if (i + 1 == x.Length)
{
this.IsMdiContainer = true;
form.MdiParent = this;
form.TopMost = true;
form.Show();
}
}
if (x.Length == 0)
{
this.IsMdiContainer = true;
form.MdiParent = this;
form.TopMost = true;
form.Show();
//form.BringToFront();
} }
formName=ds.Tables[0].Rows[0]["formName"].ToString(); //单一加载窗体
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].GetType().ToString() == formName)
{
Application.OpenForms[i].Activate();
return;
}
}