再次抱着试一试的心态来问一个问题、C# 关于加载窗体、、

crystal_lz 2012-02-03 10:48:36
呃、、这个 加载 不是 show 那个 、、 而是在那个窗体还没有显示的时候就让那个窗体把窗体里面的数据初始化好
不然 打开这个窗体的时候再来初始化这个窗体 那就悲剧了 等个一两秒窗体才能初始化好、、
貌似 以前用vb6.0的时候 都有 Load Form 来加载一个窗体、、
现在 我是在主程序的load事件里面 Form2.Show();Form2.Hide();
怎么看怎么不是滋味
...全文
191 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
govanyjj 2012-02-05
  • 打赏
  • 举报
回复
额。。
新建3个窗体from1(加载界面) ,form2主界面 ,form3字界面
在Program中先new form2
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
form2 fm = new form2()
form1 fm1 = new form1()
if(fm1.ShowDialog() == DialogResult.OK)
{
Application.Run(fm);
}
}


这样就可以实现你那个先出来一个加载窗体了,至于里面写啥字代码,你就在form1中操作吧。。然后数据加载完了之后写上一句
this.DialogResult = System.Windows.Forms.DialogResult.OK;
这样,就可以直接运行from2了,
另外。。你按F5后启动程序。。编译器要编译你的代码,然后在执行。。几秒已经够不错了。。
至于数据,个人觉得还是用多少加载多少,这样不会占用太多的资源。
[Quote=引用 9 楼 crystal_lz 的回复:]

引用 8 楼 sp1234 的回复:
另外假设你总是new之后立刻load,那么显然没有任何想当然的办法去“提前”加载什么东西。因为你连new也是刚刚进行的。

那么此时load时就不应该去加载什么东西,load的时候就应该仅仅显示一个初始界面,而最终的界面内容是(在初始化或者load中)异步加载的。所谓异步加载,最简单地你可以使用非常傻瓜化的backgroundworker控件。

……
[/Quote]
fxchuanqi 2012-02-05
  • 打赏
  • 举报
回复
有必要吗
crystal_lz 2012-02-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]
另外假设你总是new之后立刻load,那么显然没有任何想当然的办法去“提前”加载什么东西。因为你连new也是刚刚进行的。

那么此时load时就不应该去加载什么东西,load的时候就应该仅仅显示一个初始界面,而最终的界面内容是(在初始化或者load中)异步加载的。所谓异步加载,最简单地你可以使用非常傻瓜化的backgroundworker控件。
[/Quote]
我自己想了一个办法、、比如Form2是我要加载的窗体 我在Form2里面写了一个公开的方法LoadForm();
然后Form1是我的主程序 我在form1的load事件里面
F2 = new Form2();
F2.LoadForm();

这样 我在主程序加载的时候 把所有的窗体new出来并且调用了自己写的LoadForm()方法来初始化了里面的数据
等要用的时候 调用该窗体的show方法、、、
看是问题解决了、、可是启动主程序的时候 就慢了点下F5 要等几秒再能看到程序界面
我想做一个启动程序的启动画面
private void Form1_Load(object sender,EventArgs e){
//打开启动画面的窗体
//。。程序初始化
//关闭启动画面窗体
}
打开和关闭是没有问题 可是 处于挂起状态 因为load事件还没有执行完
我想的是在启动画面窗体上显示 中间那一块初始化程序的进度信息、、试过很多办法了 现在还没有头绪、、
  • 打赏
  • 举报
回复
另外假设你总是new之后立刻load,那么显然没有任何想当然的办法去“提前”加载什么东西。因为你连new也是刚刚进行的。

那么此时load时就不应该去加载什么东西,load的时候就应该仅仅显示一个初始界面,而最终的界面内容是(在初始化或者load中)异步加载的。所谓异步加载,最简单地你可以使用非常傻瓜化的backgroundworker控件。
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crystal_lz 的回复:]
是 new 了一个啊 可是 new了一个 窗体里面的一些信息呢 ?、、
窗体加载的时候 要等两秒后才能搞定、、所以 我想在窗体 显示之前就把数据加载好、、然后显示窗体的时候就不会卡了 、、
[/Quote]

这就是说,你不知道在初始化方法中(ide自动产生的那一条语句后边)再去写自己的代码,是吗?
govanyjj 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 crystal_lz 的回复:]

引用 3 楼 sp1234 的回复:
你load之前不用new一个窗体实例么?


是 new 了一个啊 可是 new了一个 窗体里面的一些信息呢 ?、、
窗体加载的时候 要等两秒后才能搞定、、所以 我想在窗体 显示之前就把数据加载好、、然后显示窗体的时候就不会卡了 、、
[/Quote]
一种方法你用委托,在他new了之后再没打开之前开始给窗体加载数据,
还有一种就是把你要把数据加载给那个控件或者属性的,设为pulic然后,在new之后Show之前,加载窗体的数据,然后加载完了,就把窗体打开,数据多了的话,整个进度条啥子的。。告诉用户,软件正在加载数据
村长_乐 2012-02-04
  • 打赏
  • 举报
回复
Load
  • 打赏
  • 举报
回复
你load之前不用new一个窗体实例么?
苦苦的潜行者 2012-02-04
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120203/22/e3d46605-0487-477b-b6a7-52c13518a203.html?92653
http://topic.csdn.net/u/20120203/22/48e66934-87d1-44f1-88d5-f7131f6897d8.html?90005

这俩帖子居然一模一样,我以为我穿越了呢!
蔡袅 2012-02-04
  • 打赏
  • 举报
回复
当你看懂了自然就有滋有味了!
C#中的窗体加载,先初始化窗体加载的各个组件,属性,状态信息..
所有的“导演”,“监制”准备好了的“晚会”,万事俱备只欠登场...
那么千呼万唤始出来:Show一个;好了你的表演够了,进“后台”吧:Hide
crystal_lz 2012-02-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sp1234 的回复:]
你load之前不用new一个窗体实例么?
[/Quote]

是 new 了一个啊 可是 new了一个 窗体里面的一些信息呢 ?、、
窗体加载的时候 要等两秒后才能搞定、、所以 我想在窗体 显示之前就把数据加载好、、然后显示窗体的时候就不会卡了 、、

110,535

社区成员

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

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

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