В ряде задач необходимо программно изменять в зависимости от ситуации изображение курсора. Сделать это достаточно просто. Необходимо изменять свойство Cursor для того объекта, над которым изображение курсора должно изменяться.
Пример. В рабочей области окна программы задействуем два вида курсора: один — при нажатии клавиши мыши («курсор-вспышка»), другой — при её отпускании («курсор-перекрестие»). Вне окна пусть будет виден обычный курсор (по-умолчанию — «стрелочка»).
Возможная реализация программы(вначале приводится текст файла MainForm.cs):
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace Prim_Cursor0
{
public partial class MainForm : Form
{
Cursor c, c2;
public MainForm()
{
InitializeComponent();
c = new Cursor("cross_il.cur");
c2= new Cursor("cross_id.cur");
Cursor = c;
}
void MainFormMouseDown(object sender, MouseEventArgs e)
{
Cursor = c2;
}
void MainFormMouseUp(object sender, MouseEventArgs e)
{
Cursor = c;
}
}
}
Текст, созданный дизайнером системы SharpDevelop (для экономии места убраны все комментарии. Этот текст приводится для тех, кто не пользуется дизайнером):
namespace Prim_Cursor0
{
partial class MainForm
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.SuspendLayout();
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 264);
this.Name = "MainForm";
this.Text = "Prim_Cursor0";
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.MainFormMouseUp);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MainFormMouseDown);
this.ResumeLayout(false);
}
}
}
Пояснения к программе. В классе MainForm создаём два поля c и c2 типа Cursor. В конструкторе MainForm задаём им начальные значения:
c = new Cursor("cross_il.cur");
c2= new Cursor("cross_id.cur");
Имена файлов с расширением *.cur должны находится в одной папке с исполняемым модулем.
Заменяем для рабочей части формы (основного окна программы) текущий курсор на один из новых:
Cursor = c;
Теперь основным курсором здесь станет «курсор-перекрестие».
Обработчик MainFormMouseDown() (нажатие клавиши мыши) заменяет «курсор-перекрестие» на курсор другого вида: «курсор-вспышка».
При отпускании клавиши мыши срабатывает обработчик MainFormMouseUp() и курсор снова заменяется на «курсор-перекрестие».
Возникает вопрос: как создавать графические изображения курсоров, т.е. файлы с расширением *.cur ? В ряде случаев подойдут стандартные курсоры («курсор-перекрестие» хранится в файле cross_il.cur, который лежит в папке Windows/Cursors. Если стандартных курсоров недостаточно, то можно поискать что-нибудь подходящее в Интернете или воспользоваться какой-либо сторонней программой для создания курсоров (обычная «рисовалка» типа Paint здесь не подойдёт!). Например, «Курсор-вспышка» нарисован мной в редакторе курсоров RealWorld Cursor Editor (программа бесплатна для личного использования). Эта программа позволяет создавать как обычные курсоры, так и анимированные (имеют расширение *.ani). К сожалению, в C# простыми средствами (как описано выше) анимированные курсоры задействовать не удастся.
|
|
|