关于winform窗体的疑问

逍遥散人 2007-05-22 12:33:37
我的程序由4个窗体构成,
download.cs、serverinfo.cs、login.cs、mainfrm.cs
具体流程如下:
程序启动后首先加载download.cs,从info.ini中获取服务器地址,然后连接数据库并下载最新的商品信息。(如果info.ini不存在则弹出serverinfo.cs窗体让用户输入服务器地址及其它信息,点击serverinfo.cs中的“保存”按钮后,退出程序,由用户重新启动程序。)下载完毕后弹出login.cs窗口,用户输入工号及密码,进入主界面进行后续工作。

现在的迷惑是:
1、因为程序首先加载的是download.cs窗体,那么,从网上搜索的结果来看,download.cs是作为主窗体的,无法使用this.close,只能使用this.hide,可我试验的结果是,this.hide并没有生效,大家帮我看看我的代码有什么问题:
......
if(File.Exists(fname))
{
iniabout ia = new iniabout();
s_ip=ia.IniReadValue("SERVER", "IPADDR", fname.ToString());
mysocket mys = new mysocket();

string ss = mys.SocketSendReceive(s_ip, 1433);

if (ss == "Connection failed")
{
//Application.Exit();//退出应用程序
this.Hide();
login li = new login();
li.Show();
}
}
else
{
this.Hide();
serverinfo si = new serverinfo();
si.Show();
}
......

2、为什么vs2005会把启动窗体作为主窗体?是我理解错了?还是别的什么,我的理解中应该是manfrm.cs作为主窗体的,现在download.cs作为了主窗体,却不能关闭,如果hide成功了的话,那么,在我程序的线程中这个窗体仍然白白占用着系统资源。这很是让我郁闷,大家关于这方面有什么好的建议没有?
...全文
324 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tete 2007-05-22
  • 打赏
  • 举报
回复
学习...winform
yumanqing 2007-05-22
  • 打赏
  • 举报
回复
mark up
cancerser 2007-05-22
  • 打赏
  • 举报
回复
---退出程序用Application.Exit();
hide是不能用在load方法中的,你这个写在Activated事件中应该是比较合适的
你可以先启动mainfrm,在其Activated方法中把其隐藏
然后在其load方法中执行其他验证及窗体
randomx 2007-05-22
  • 打赏
  • 举报
回复
学习帮顶
chrisky2006 2007-05-22
  • 打赏
  • 举报
回复
Application.Run(new frm());
Knight94 2007-05-22
  • 打赏
  • 举报
回复
对于你所所说的问题,比较正确的方法是修改Program.cs中的Main函数来控制窗体的加载顺序。

chrisky2006 2007-05-22
  • 打赏
  • 举报
回复
this.Hide() 是能隐藏窗体的。
一个程序不能关闭主窗体。所有只能隐藏主窗体。
其他窗体可以通过Application.Exit()来关闭程序。
amandag 2007-05-22
  • 打赏
  • 举报
回复
在Main函数中改..
david_anwei 2007-05-22
  • 打赏
  • 举报
回复
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
loginform form=new loginform()

if(down.ShowDialog()==DialogResult.OK)
{
Application.Run(new manfrm());
}


}
甴曱 2007-05-22
  • 打赏
  • 举报
回复
在C#里面,默认的主窗口是Application.Run()事件里面的。
1、你可以试着在里面加载一个多线程的方式来解决该问题。
2、或者你要使用download.cs在manfrm.cs前运行,那么,你可以试着将download.cs设置为对话框的形式。采用ShowDialog()事件。在Main事件里面:
if(down.ShowDialog()==DialogResult.OK)
{
Application.Run(new manfrm());
}

如果采用多线程的方式,请参考:http://community.csdn.net/Expert/TopicView.asp?id=5475979

110,556

社区成员

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

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

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