C#winform窗口显示问题
同一个项目里的两个窗体,Form2和Popup两个窗体。(以下用F2和P2表示)
F2窗体是下检测到附和条件的数据将自动从桌面右下角弹出新消息提示框,即窗体P2。
现在我想实现点击右下角弹出的窗体能显示F2窗体就好,F2差窗体一定是打开的,且要么在托盘,要么自然窗体。
简单的Form2 f2=new Form2();
private void panel1_Click(object sender, EventArgs e)
{
f2.Show();
}
试过,弹出的是新的F2,不是打开过的F2。且托盘多了个程序的图标。
黏上相关代码请求给为大神帮忙!
From2相关代码:
private void pictureBox4_Click(object sender, EventArgs e)//最小化到托盘
{
pictureBox2.Visible = true;
pictureBox4.Visible = false;
this.Hide();
this.WindowState = FormWindowState.Minimized;//最小化
}
private void Form2_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) //判断是否最小化
{
//this.ShowInTaskbar = false; //不显示在系统任务栏
//notifyIcon1.Visible = true;//托盘图标可见
}
if (WindowState == FormWindowState.Normal)
{
pictureBox5.Visible = true;
}
}
public void notifyIcon1_Click(object sender, EventArgs e)//单击托盘图标还原窗口
{
if (this.WindowState == FormWindowState.Minimized)
{
//this.ShowInTaskbar = true; //显示在系统任务栏
this.Show();
this.WindowState = FormWindowState.Normal; //还原窗体
//notifyIcon1.Visible = false; //托盘图标隐藏
}
if (this.WindowState==FormWindowState.Normal)
{
this.TopMost = true;
}
}
public void Max_Min() //实现最大化和还原窗口默认大小的方法
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
}
else
{
this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.WindowState = FormWindowState.Maximized;
}
}
private void Form2_Deactivate(object sender, EventArgs e)//失去焦点后窗体靠后
{
this.TopMost = false;
}
Popup就是一个桌面右下角上升的窗体,然后到时间后自动消失,是在P2窗体的
private void panel1_Click(object sender, EventArgs e)
中写事件。
便恭喜解
[解决办法]
void Form2_Show()
{
if (p2==null) p2=new Popup(this);
}
以上的函数放在Form2中,
下面的的是Popup的构造函数,在Popup类中。
Popup (Form2 form2)
{f2=form2;}
下面是你自己的函数拉
private void panel1_Click(object sender, EventArgs e)
{
if (!f2.visable) f2.Show();
}
[解决办法]
Owner应该就可以了
f2.Show(this);
private void Form2_Click(object sender, EventArgs e)
{
if(this.Owner != null) this.Owner.Show();
}
[解决办法]
窗体多的话可以开个类来进行管理 public class StorageFormList
{
public static Hashtable list = new Hashtable();
public static void Add(string frmname, Form frmentity)
{
if (!list.ContainsKey(frmname))
{
list.Add(frmname, frmentity);
}
else
{
Form frm = (Form)list[frmname];
if (frm.IsDisposed)
{
list.Remove(frmname);
list.Add(frmname, frmentity);
}
}
}
public static void Substract(string franame)
{
if (!list.ContainsValue(franame))
{
list.Remove(franame);
}
}
}
如果是MDIParent多窗体的话,你可以直接用一个方便去遍历他的子窗体