WinForms FAQ - Cursors

Find answers for the most frequently asked questions
Expand All Collapse All

Setting the Current property changes the cursor and stops the processing of mouse events. Setting the cursor back to Cursors.Default restarts the mouse event processing and displays the proper cursor for each control. If a DoEvents is called before you reset the cursor back to the default, this will also start up the mouse event processing and you will lose the particular cursor you set. So, if your WaitCursor is disappearing, one explanation might be that DoEvents is getting called.

Here is some code that sets a WaitCursor.

	Cursor oldCursor = Cursor.Current;
	Cursor.Current = Cursors.WaitCursor;
	try 
	{
		// Do your processing that takes time...
		// eg. let’s wait for 2 seconds...
		DateTime dt = DateTime.Now.AddSeconds(2);
		while(dt > DateTime.Now)
		{ //do nothing	
		}
	}
	finally 
	{
		Cursor.Current = oldCursor;
	}
Permalink
System.IO.Stream strm = null;
try
{
	string curName = 'WindowsApplication1.Cursor1.cur';
	strm = this.GetType().Assembly.GetManifestResourceStream(curName);
	this.Cursor = new Cursor(strm);
}
catch(Exception ex)
{
	MessageBox.Show(ex.Message.ToString());
}
finally
{
	if(strm != null)
		strm.Close();
}
Permalink
	protected void WriteCursorToFile(Cursor cursor, string fileName)
	{
		byte[] blob = TypeDescriptor.GetConverter(typeof(System.Windows.Forms.Cursor)).ConvertTo(cursor, typeof(byte[])) as byte[];

		if(blob != null)
		{
			FileStream fileStream = new FileStream(fileName, FileMode.Create);
			fileStream.Write(blob, 0, blob.Length);
			fileStream.Flush();
			fileStream.Close();
		}
		else
			MessageBox.Show('Unable to convert Cursor to byte[]');
	}
Permalink

Share with

Couldn't find the FAQs you're looking for?

Please submit your question and answer.