[转]c#有关winform的两个代码片段(多线程操作窗体控件与窗体淡入淡出效果)

1.多线程操作窗体控件

delegate void SetTextCallback(string text);

          private void SetText(string text)

          {

              // InvokeRequired required compares the thread ID of the

              // calling thread to the thread ID of the creating thread.

              // If these threads are different, it returns true.

              if (this.textBox1.InvokeRequired)

              {

                  SetTextCallback d = new SetTextCallback(SetText);

                  this.Invoke(d, new object[] { text });

              }

              else

              {

                  this.textBox1.Text = text;

              }

          }

 

SetText(time.ToString());

 

 

2.

C#实现窗体淡入淡出效果的几种方法(转)

1.

    private     void     Form1_Load(object     sender,     System.EventArgs     e)  

    for(double     d=0.01;     d<     1;     d+=0.02)  

    {  

    System.Threading.Thread.Sleep(1);  

    Application.DoEvents();  

    this.Opacity=d;  

    this.Refresh();  

    }

 

 

2.

 

    private     void     timer1_Tick(object     sender,     System.EventArgs     e)  

    {  

    this.Opacity     =     WinShow     ;  

    WinShow     +=     0.1     ;  

    if(WinShow     >=1     )  

    {  

    timer1.Dispose     ();  

    }  

    }

 

 

3.

 

用循环或计时器,  

    frmForm     myForm=new     frmForm()  

    frmForm.Opacity=0;  

    frmForm.show();  

    for(int     i=0;i<100;i++)  

    {  

    Application.DoEvents()  

    frmForm.Opacity=i/100;  

    }

 

 

4.

 

    #region       ********     窗体淡入效果函数         ********  

    private     double     WinShow     =     0;//用于窗口淡入效果的变量  

   

    private     void     FormShow(System.Windows.Forms.Form     Curfrm)  

    {  

    Curfrm.Opacity     =     WinShow     ;   

    WinShow     +=     0.01;  

    if(WinShow     ==     1)  

    {  

    Curfrm.timerShow.Stop     ();  

    }  

    }  

   

    #endregion  

   

    #region       ********     窗体淡入效果函数调用示例         ********  

    //实现窗口的淡入效果  

    private     void     timerShow_Tick(object     sender,     System.EventArgs     e)  

    {  

    //timerShow,这是一个timer控件名称;把timerShow.interval=100就可以了。  

    FormShow(this);  

    }  

    #endregion

 

5.

 

using System.Runtime.InteropServices;

 

 

public class Win32

         {

             public const Int32 AW_HOR_POSITIVE = 0x00000001;     // 从左到右打开窗口

             public const Int32 AW_HOR_NEGATIVE = 0x00000002;     // 从右到左打开窗口

             public const Int32 AW_VER_POSITIVE = 0x00000004;     // 从上到下打开窗口

             public const Int32 AW_VER_NEGATIVE = 0x00000008;     // 从下到上打开窗口

             public const Int32 AW_CENTER = 0x00000010;

             public const Int32 AW_HIDE = 0x00010000;         // 在窗体卸载时若想使用本函数就得加上此常量

             public const Int32 AW_ACTIVATE = 0x00020000;     //在窗体通过本函数打开后,默认情况下会失去焦点,除非加上本常量

             public const Int32 AW_SLIDE = 0x00040000;

             public const Int32 AW_BLEND = 0x00080000;        // 淡入淡出效果

             [DllImport("user32.dll", CharSet = CharSet.Auto)]

            public static extern bool AnimateWindow(

             IntPtr hwnd,   //   handle   to   window   

             int dwTime,   //   duration   of   animation   

             int dwFlags   //   animation   type   

             );

         }

 

 

 

/*淡入窗体*/

 

private void Form_Load(object sender, EventArgs e)

{

         Win32.AnimateWindow(this.Handle, 2000,   Win32.AW_BLEND);

}

 

 

 

/*淡出窗体*/

 

private void Form_FormClosing(object sender, FormClosingEventArgs e)

{

     Win32.AnimateWindow(this.Handle, 2000, Win32.AW_SLIDE | Win32.AW_HIDE | Win32.AW_BLEND);

}

 

 

 


posted @ 2008-08-01 13:56  DotNet菜园  阅读(2462)  评论(0编辑  收藏  举报