none
怎么能让窗体一打开就执行一个动作? RRS feed

  • 问题

  • 我想让窗体一打开就执行一段代码,

    如果放在Form_Load()里面,画面的其他部分显示就比较慢。

    如果放在Active里面,就会每次都发生,我只要执行一次。有什么好方法吗?

    刚才把代码放到了Shown事件里面,但感觉还是不行。例如,画面在执行完代码后才显示按钮。我希望能把画面上的东西显示完全后再执行代码。

    谢谢。
    2010年1月19日 10:57

答案

  •  Public Sub New()
    
            ' 此调用是 Windows 窗体设计器所必需的。
            InitializeComponent()
    
            ' 在 InitializeComponent() 调用之后添加任何初始化。
    
    '你的代码
        End Sub

    http://feiyun0112.cnblogs.com/
    2010年1月20日 0:44
    版主
  • 菜鸟学VB 你好,

    建议你还是放在Active里,设置一个变量再加一个If判断,第一次加载窗体的时候那个变量为True,执行你的代码,执行完就把变量设成False。第二次促发Active的时候就不会执行你的代码了。

    Sincerely,
    Kira Qian


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年1月20日 7:04
  • 你好!
         一般不要在这样的情况下执行复杂的逻辑,很可能导致你现在遇到的情况!
    周雪峰
    2010年1月21日 7:27
    版主

全部回复

  • 你是在窗体上加了什么控件啊,怎么会比较慢呢。

    是你自定义的控件吗,还是别的什么控件。

    2010年1月19日 11:04
  • 你是在窗体上加了什么控件啊,怎么会比较慢呢。

    是你自定义的控件吗,还是别的什么控件。

    我的窗体上主要是按钮,不是自定义控件。但是,我就想让窗体先显示完全,在执行我的代码。

    例如,我想一打开窗口就显示当天的一个表格数据(从硬盘读,比较慢). 显示表格慢没关系,但我想让窗体显示完全(该显示的按钮,Label等)在慢慢显示这个表格。

    我的问题是,我该把显示表格数据的代码放在那个事件比较好呢? Load, Shown,Active好像都不合适。
    2010年1月19日 11:42
  • 你好!
         放在Shown事件中是可以的,并不会导致原来的控件显示不出来,这个事件是窗体显示后触发的:
            private void form1_Shown(object sender, EventArgs e)
            {
                MessageBox.Show("asdf");  //这里显示消息框,并没有导致主窗体上的按钮显示不出来
            }
            你具体是什么情况呢?
    周雪峰
    2010年1月19日 12:16
    版主
  •  Public Sub New()
    
            ' 此调用是 Windows 窗体设计器所必需的。
            InitializeComponent()
    
            ' 在 InitializeComponent() 调用之后添加任何初始化。
    
    '你的代码
        End Sub

    http://feiyun0112.cnblogs.com/
    2010年1月20日 0:44
    版主
  • 菜鸟学VB 你好,

    建议你还是放在Active里,设置一个变量再加一个If判断,第一次加载窗体的时候那个变量为True,执行你的代码,执行完就把变量设成False。第二次促发Active的时候就不会执行你的代码了。

    Sincerely,
    Kira Qian


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年1月20日 7:04
  • 谢谢楼上各位的建议,我会把你们提到的几种方法都试一下,但今天没时间了,明天做,然后告诉大家试验结果。
    感谢大家的热心帮助。
    2010年1月20日 12:00
  • 我今天试了一下, 把代码分别放在 shown, New()和Actived,但是结果几乎相同,在执行代码时(显示一些从硬盘读出的数据),画面顶部的按钮都没有显示完全,被一层蓝灰色的条罩住,在瞬间看出这个Form的Text,然后才消失再显示按钮(我的Form做成没有ControlBox,无边框).

    我现在怀疑是不是我的按钮有些复杂, 一共有一排7个按钮,每个按钮都有一个ImaginList的图像。可是我把这部分代码去掉,速度还可以,按钮的地方有个灰条一闪而过。

    2010年1月21日 7:06
  • 你好!
         一般不要在这样的情况下执行复杂的逻辑,很可能导致你现在遇到的情况!
    周雪峰
    2010年1月21日 7:27
    版主
  • 好的,这个问题先这样吧,我需要先干其他的事情,这个帖子先结了。
    感谢各位的回答,我后面会再研究下这个事情,到时更新。
    2010年1月21日 9:12