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也无济于事。
小弟初学,敬请赐教,不胜感谢!

解决方案 »

  1.   

    to 需要它在窗体和窗体上的控件显示后执行这个好办,用timer控件,在load中就加载这段程序,等timer的定时器到点后,程序再执行
      

  2.   

    for (ulong i = 0; i < 399999999; i++) ;这种延时可不好,对C#来说,我可能在几毫秒就执行完了,你可以用Thread的Sleep()来试试
      

  3.   

    或者用mutex中的waitOne( 1000 )来试试
      

  4.   

    在C#里面:for (ulong i = 0; i < 399999999; i++) ; 这种循环会被“优化”,即便 i < long.maxvalue 也就是眨眼的事情。
      

  5.   

    第一个问题:
            private void Form1_Load(object sender, EventArgs e)
            {
                this.Show();
                //下面再写你要的代码
                //比如MessageBox.Show("123");
            }
      

  6.   

    1.可以写OnPaint()
    2.加上label.Refresh()
      

  7.   

    路过:1、最后一个控件的OnShow()
    2、多线程才能看到楼主想要的效果!
      

  8.   

    我很菜,提一下我的看法:其实你何必把他们一起写呢?加一个TIMER控件在中间进行连接就行了。
    无论你写在哪个事件里面,比方说LOAD吧,除非你用另外的控件跳出,它显示的都是事件触发后全部代码完成后的东东,呵呵,说得不是太清楚,应该可以理解的吧~
    例如:
    label1.text="chuci"
    //
    延迟代码。
    //
    label1.text="houlai"无论选哪个事件,只要他们在同一事件的代码里面显示的都只会是"houlai"。何不把延迟代码换成Timer控件
      

  9.   

    给一点建议不知道行不行,把加载控件的代码,CUT到LOAD事件中.
      

  10.   

    Application.DoEvents();
    +延时函数
      

  11.   

    for (int i = 0; i < 100; i++)
                {
                    label1.Text = i.ToString();
                    Application.DoEvents();
                    Thread.Sleep(10);
                    
                }
      

  12.   

    你第一个问题是:用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就可以了;
    总的来说,你应编程初学者。。?
      

  13.   

    1. Initial Component 之后
    2. 你没有返回窗口不会刷新的, 用多线程来处理吧, 再说也没人象你这样忙等来延时的
      

  14.   

    可以用多线程 Thread.Sleep() 控制等待时间