2014-02-20 2 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; 
    } 
} 
Смежные вопросы