我就不信。CSDN找不到解决我问题的高手

l8487 2008-07-31 04:51:07
这几天遇到一个问题,苦思不得其解。
我有这样一个程序,form1中有个webbrower控件。初始化以后登陆网站,用户再点击开启监控。通过timer控件来不停的读取网站数据。达到监控网站的目的。我把form1注册成了托盘图标。当我隐藏form1以后(也就是form1去了托盘了)。如果这个时候监控到了异常情况,在右下角显示一个From2,然后通过点击form2上的按钮显示出form1.
现在遇到的问题是。通过点击form2上的按钮不能显示form1.(好多人都说new一个form1出来。但是new出来的状态根本不是监控当时的状态。而是重新建了一个form1.使我开了两个程序)
我以前用Delphi开发程序的时候。比如两个Form。Form1和Form2。当Form1被我隐藏了以后。我在From2引入Form1.然后在Form2中写Form1.Visible=true;From2.Show();这样一句话就可以将Form1显示出来,From1中的控件的值不会初始化,还是隐藏前的样子。不会对From1造成任何影响。
但是.net里边把From当成了一个个的类。我隐藏了Form1以后。From2就没办法设置From1的属性。也就是说,当我隐藏From1以后。在From2中必须new一个form1.然后show出来。。。这就造成我的from1中所有的控件都初始化了。不能回到我隐藏的时候的状态。
这个问题两天了,我都没有找到解决办法。不知道CSDN的高手能否出来解决一下。
...全文
311 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
myjce 2008-08-01
  • 打赏
  • 举报
回复
有那么复杂吗?这个问题很简单啊

private void timer1_Tick(object sender, EventArgs e)
{
if (err==true)//发生错误时显示Form2
{
Form2 frm2 = new Form2();
frm2.Owner = this;
frm2.TopMost = true;
frm2.Show();
timer1.Stop();
}
}


//Form2中的按钮事件
private void button1_Click(object sender, EventArgs e)
{
this.Owner.Show();
this.Owner.WindowState = FormWindowState.Normal;//这句最关键,没这句不会直接显示
this.Close();
}
l8487 2008-08-01
  • 打赏
  • 举报
回复
24楼貌似分析有道理。在program.cs中修改用的是默认的构造函数啊。。如果调用默认构造函数。还是programe.cs修改更方便使用吧。
qinqinhao 2008-08-01
  • 打赏
  • 举报
回复
ding
ding
hm7921936 2008-07-31
  • 打赏
  • 举报
回复
当然是重载构造函数拉.
如果修改program 在有新窗体呢?
从载构造更加灵活,适应的环境更广.
paulin 2008-07-31
  • 打赏
  • 举报
回复
mark~
l8487 2008-07-31
  • 打赏
  • 举报
回复
到现在我做成功了两种。一种是重载构造函数。一种是修改program.cs
重载构造函数相对来说比较安全。。修改program.cs如果做项目安全性差些。
楼下的回答。比较一下这两种方式?
tanxiaolin520 2008-07-31
  • 打赏
  • 举报
回复
this.Hide();
wangxb8888 2008-07-31
  • 打赏
  • 举报
回复
关注啊 多弄点意见
GabrielCNMao 2008-07-31
  • 打赏
  • 举报
回复
字節把FORM1實例化成FORM2的一個屬性,
private Form1 frmk;
public Form1 m_frmk
{
set
{
this.frmk = value;
}
get
{
if (frmk == null)
{
frmk = new Form1();
return frmk;
}
return frmk;
}
}
大蝦們看看行么?
老田低代码 2008-07-31
  • 打赏
  • 举报
回复
这样吧:


//在form2中增加一个属性比如
//这样其实就是在form2中有了form1的引用
public form Form1
{
set{this._Form1=value;}
}

//然后form2中调用的时候,应该是可以的。。。
this._Form1.Visible = true;
bwangel 2008-07-31
  • 打赏
  • 举报
回复
没用过Delphi,不过我想Delphi里的Form不同样也是类么.

肯定不能再new一个Form1. 你在Form2里要当Form1不存在. 让Form1自己Show出来.

刚才试了下,这个问题很容易的:

form2代码:

public partial class Form2 : Form
{
public EventHandler ThisCall;
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
ThisCall(sender,e);
}
}

form1代码:


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private Form2 form2 = null;

//我这里用一个定时器呼出form2的
private void timer1_Tick(object sender, EventArgs e)
{
if (form2 == null)
{
form2 = new Form2();
form2.Show();
form2.ThisCall += restore;
}
timer1.Stop();
}

private void restore(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
}
}
l8487 2008-07-31
  • 打赏
  • 举报
回复
继续。把所有的思路和办法都写写!!.net不同与VB的一个很大区别
楼下继续
smartstar2005 2008-07-31
  • 打赏
  • 举报
回复
你可以把你的Form1做成一个全局的变量,保存一个全局的句柄。这样,不管Form2是怎么出来的,都可以在其中直接操作全局的Form1。

楼上有兄弟说用单件也是一个可行的办法。

楼主不妨试试
Zeteyu 2008-07-31
  • 打赏
  • 举报
回复
Program中加入
public static Form1 form1;

原来
Application.Run(new form1);

改为
form1 = new Form1();
Application.Run(form1);


Form2中调用
Program.form1.ShowInTaskbar=true;
l8487 2008-07-31
  • 打赏
  • 举报
回复
我在form1中new form2的时候设置form2.owner=form1;在form2中使用
this.ParentForm.Visible = true;
this.ParentForm.Show();
提示:未将对象设置引入到对象的实例。。
pupo 2008-07-31
  • 打赏
  • 举报
回复
Form2中代码:

From2里面重载个构造函数,参数设置成From1
Form1 myForm1 = null;
public Form2(Form1 frm)
{
InitializeComponent();
this.myForm1 = frm;//在Form2里面操作myForm1就相当于操作Form1
}


Form1中代码:

在Form1弹出Form2的代码
Form2 frm = new Form2(this);
frm.Show();
anliuty 2008-07-31
  • 打赏
  • 举报
回复
这个问题很好解决,在Form2中定义个公共静态的System.Window.Forms.Form类型的变量,
在Form1隐藏之前,把自己赋值给那个静态变量,
当在Form2上点击按钮时,取出静态变量中的Form1,再Show出来就可以了
GabrielCNMao 2008-07-31
  • 打赏
  • 举报
回复
我剛剛試了下,怎么不用啊,
yuzhlhua 2008-07-31
  • 打赏
  • 举报
回复
mark
wdgphc 2008-07-31
  • 打赏
  • 举报
回复
干吗不简单些,如果这个时候监控到了异常情况,在右下角显示一个Form1的新图片,然后通过点击新图片上的按钮显示出form1. Form1.Visible=true
加载更多回复(7)

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧