Курсор. Текущий по сравнению с этим. Курсор

54
задан tshepang 18 March 2014 в 18:10
поделиться

3 ответа

Windows отправляет окно, которое содержит курсор мыши сообщение WM_SETCURSOR, давая ему возможность изменить форму курсора. Управление как TextBox использует в своих интересах это, изменяя курсор в I-панель. Управление. Свойство Cursor определяет, какая форма будет использоваться.

Курсор. Текущее свойство изменяет форму непосредственно, не ожидая ответа WM_SETCURSOR. В большинстве случаев та форма вряд ли будет долгое время выживать. Как только пользователь перемещает мышь, WM_SETCURSOR возвращает ее для Управления. Курсор.

свойство UseWaitCursor было добавлено в.NET 2.0, чтобы облегчить отображать песочные часы. К сожалению, это не работает очень хорошо. Это требует, чтобы сообщение WM_SETCURSOR изменило форму, и этого не произойдет, когда Вы установите свойство на истинный и затем делаете что-то, что требует времени. Попробуйте этот код, например:

private void button1_Click(object sender, EventArgs e) {
  this.UseWaitCursor = true;
  System.Threading.Thread.Sleep(3000);
  this.UseWaitCursor = false;
}

курсор никогда не изменяется. Для битья этого в форму необходимо будет использовать Курсор. Текущий также. Вот немного класса помощника для упрощения:

using System;
using System.Windows.Forms;

public class HourGlass : IDisposable {
  public HourGlass() {
    Enabled = true;
  }
  public void Dispose() {
    Enabled = false;
  }
  public static bool Enabled {
    get { return Application.UseWaitCursor; }
    set {
      if (value == Application.UseWaitCursor) return;
      Application.UseWaitCursor = value;
      Form f = Form.ActiveForm;
      if (f != null && f.Handle != IntPtr.Zero)   // Send WM_SETCURSOR
        SendMessage(f.Handle, 0x20, f.Handle, (IntPtr)1);
    }
  }
  [System.Runtime.InteropServices.DllImport("user32.dll")]
  private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}

И использование это как это:

private void button1_Click(object sender, EventArgs e) {
  using (new HourGlass()) {
    System.Threading.Thread.Sleep(3000);
  }
}
88
ответ дан Blorgbeard 7 November 2019 в 07:54
поделиться

this.Cursor курсор, который будет использоваться, когда мышь будет по окну, упомянутому this. Cursor.Current текущий курсор мыши, который мог бы отличаться от this.Cursor, если мышь по различному окну.

6
ответ дан Joel Coehoorn 7 November 2019 в 07:54
поделиться

Я верю тому Курсору. Текущий, в настоящее время курсор мыши используясь (независимо от того, где это находится на экране), в то время как это. Курсор является курсором, на который он будет установлен, когда мышь передаст по Вашему окну.

10
ответ дан James Curran 7 November 2019 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: