2014-02-20 67 views
1

我曾嘗試以下如何設置WaitCursor光標移到禁用的WinForms

this.Cursor = Cursors.WaitCursor; //OR 
this.UseWaitCursor = true; //OR 
Application.UseWaitCursor = true; //OR 
Application.DoEvents(); //AND 

,但顯然等待光標沒有出現在添加以下行:

this.Enabled = false; 

P/S:this是指窗體。


問:

如何設置WaitCursor光標放在禁用的WinForms?

+0

有沒有爲什麼你想禁用形成了良好的原因是什麼?我認爲這不是一個好的做法,因爲它會停止接收消息,所以事件處理程序不會啓動! 我會考慮重新設計。例如:禁用所有控件(簡單的foreach循環)。 – etaiso

+0

[Cursor.Current vs. this.Cursor]的可能重複(http://stackoverflow.com/questions/302663/cursor-current-vs-this-cursor) –

+0

它在禁用的表單上工作得很好。我想,有些SO用戶無法得到幫助。 –

回答

1

您應該以不同的方式處理事情......應該沒有理由禁用表單來阻止用戶交互。使用帶有進度條或消息的對話框,讓用戶知道發生了什麼。不要讓用戶覺得程序掛起或崩潰。這是一條可怕的路線。想一想用戶的觀點,以及當你使用別人的程序時會感到沮喪。

然而,這個工作對我來說:

this.Enabled = false; 
this.UseWaitCursor = true; 

顯然,只有當顯示光標經過形式。

這裏就是整個測試代碼:

namespace WindowsFormsApplication1 
{ 
    partial class Form1 
    { 
     private System.ComponentModel.IContainer components = null; 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     private void InitializeComponent() 
     { 
      this.button1 = new System.Windows.Forms.Button(); 
      this.SuspendLayout(); 

      this.button1.Location = new System.Drawing.Point(163, 110); 
      this.button1.Name = "button1"; 
      this.button1.Size = new System.Drawing.Size(75, 23); 
      this.button1.TabIndex = 0; 
      this.button1.Text = "button1"; 
      this.button1.UseVisualStyleBackColor = true; 

      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.ClientSize = new System.Drawing.Size(284, 262); 
      this.Controls.Add(this.button1); 
      this.Name = "Form1"; 
      this.Text = "Form1"; 
      this.ResumeLayout(false); 
      this.Enabled = false; 
      this.UseWaitCursor = true; 
     } 

     private System.Windows.Forms.Button button1; 
    } 
}