首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请求赐教:初学C#的两个有关问题

2012-01-18 
请求赐教:初学C#的两个问题1.有一段代码,需要它在窗体和窗体上的控件显示后执行,应该把它放在哪里呢?1)如

请求赐教:初学C#的两个问题
1.有一段代码,需要它在窗体和窗体上的控件显示后执行,应该把它放在哪里呢?
1)如把它放在构造函数里,执行时窗体还未显示;
2)如把它放在Form_Load事件里,执行时窗体还是没有显示;
3)如把它放在Form_Shown事件里,执行时窗体虽显示了,但窗体上的控件仍未显示。

2.有一段代码,它根据执行状态相应修改窗体上已显示的label控件:
                ///   > >   正在检测网络连接...
                ///         正在连接网络...
                ///         网络已连接,请进行登录验证:
                ///label_04.Text= "> > "
                ///label_05.Text= "正在检测网络连接... "
                ///label_06.Text= "正在连接网络... "
                ///label_07.Text= "网络已连接,请进行登录验证: "
                private   void   TestAndLinkNetwork()
                {
                        //延时,以后将放置网络硬件测试代码;
                        for   (ulong   i   =   0;   i   <   399999999;   i++)   ;  
                       
                        //label控件属性第一次改变;
                        label_05.Enabled   =   false;
                        label_04.Top   +=   16;
                        label_06.Enabled   =   true;

                        //延时,以后将放置网络连按代码;
                        for   (ulong   i   =   0;   i   <   399999999;   i++)   ;
                       
                        //label控件属性第二次改变;
                        label_06.Enabled   =   false;
                        label_04.Top   +=   16;
                        label_07.Enabled   =   true;
                }
实际执行时,不论延时长短,窗体上总是直按显示label控件属性第二次改变后的结果,而label控件属性第一次改变的结果总是不能被正确显示出来。即使在每次属性改变后加label.Show也无济于事。
小弟初学,敬请赐教,不胜感谢!

[解决办法]
for (ulong i = 0; i < 399999999; i++) ;

这种延时可不好,对C#来说,我可能在几毫秒就执行完了,你可以用Thread的Sleep()来试试
[解决办法]
或者用mutex中的waitOne( 1000 )来试试
[解决办法]
在C#里面:

for (ulong i = 0; i < 399999999; i++) ;

这种循环会被“优化”,即便 i < long.maxvalue 也就是眨眼的事情。
[解决办法]
第一个问题:


private void Form1_Load(object sender, EventArgs e)
{
this.Show();
//下面再写你要的代码
//比如MessageBox.Show( "123 ");
}
[解决办法]
1.可以写OnPaint()
2.加上label.Refresh()
[解决办法]
。。。我很菜,提一下我的看法:其实你何必把他们一起写呢?加一个TIMER控件在中间进行连接就行了。
无论你写在哪个事件里面,比方说LOAD吧,除非你用另外的控件跳出,它显示的都是事件触发后全部代码完成后的东东,呵呵,说得不是太清楚,应该可以理解的吧~
例如:
label1.text= "chuci "
//
延迟代码。。。。
//
label1.text= "houlai "

无论选哪个事件,只要他们在同一事件的代码里面显示的都只会是 "houlai "。

何不把延迟代码换成Timer控件。。。
[解决办法]
你第一个问题是:用timer控件 可以设定时间来运行你的那个代码
也可以用OnPaint事件 要这样用
private bool t=true;
void OnPaint(object sender,...)
{
if(t)
{
t=false;
//+你的代码 ;
}
你的第二个问题
}
for (ulong i = 0; i < 399999999; i++) ;
可以用Thread.sleep(10000);//线程睡了10秒。。
你的控件:
label_04.Text= "> > "
///label_05.Text= "正在检测网络连接... "
///label_06.Text= "正在连接网络... "
///label_07.Text= "网络已连接,请进行登录验证: "
这样用不好:
它们用一个就可以了,还不移动位置;
label_04.Text= "> > "
label_04.Text= "正在检测网络连接... "
label_04.Text= "正在连接网络... "
label_04.Text= "网络已连接,请进行登录验证: "

或者用listbox就可以了;


总的来说,你应编程初学者。。?

热点排行