2015-06-26 3 views
-2

Я хочу определить свой собственный курсор как текущий курсор в моем приложении WPF, но wenn Я пытаюсь создать новый объект курсора из моего .cur файла, я получаю сообщение об ошибке.Как реализовать пользовательский курсор в C#?

Мой код

 private void NewFile() 
    { ... 

     iEvent_dragdrop = (HTMLDocumentEvents2_Event)doc; 
     iEvent_dragdrop.ondragstart += new HTMLDocumentEvents2_ondragstartEventHandler(IEvent_ondragstart);   
    } 

    private bool IEvent_ondragstart(IHTMLEventObj pEvtObj) 
    { 
     x_start = pEvtObj.x;   // Read position of Mouse 
     y_start = pEvtObj.y; 

     .... 

     if (File.Exists("MyCursor.cur")) 
     { 
      System.Windows.Forms.Cursor myCursor = new System.Windows.Forms.Cursor(GetType(), "MyCursor.cur"); 
      System.Windows.Forms.Cursor.Current = myCursor; 
      //System.Windows.Forms.MessageBox.Show("File exist"); 
     } 
     else System.Windows.Forms.MessageBox.Show("File does not exist"); 

     return false; 
    } 

При попытке перетащить HTML-объект, я получаю System.NullReferenceException ошибка wasn't обрабатывается в исходном коде. Но я тестировал, если файл существует .... Может ли кто-нибудь сказать мне, какая у меня ошибка?

Спасибо!

+1

"Я получаю сообщение об ошибке." - Что это? –

+0

В System.NullReferenceException исключение происходит из типа «System.Windows.Forms.dll», но это не обрабатывалось в пользовательском коде ... но я сделал if (File.Exist («myCursor.cur»)) перед созданием нового –

+0

Пожалуйста, отредактируйте ваше сообщение с описанием ошибки, строкой возникновения и всем соответствующим кодом. –

ответ

0

Я рекомендую searching the web перед тем, как просить. Первый результат поиска для названия объясняет все, что вам нужно знать.

Попробуйте это:

class Program { 
    [System.STAThread] 
    static void Main(string[] args) { 
     byte[] cursorBytes = new System.Net.WebClient().DownloadData(@"https://github.com/tlorach/nvGraphy/raw/master/cursor1.cur"); 
     System.IO.Stream cursorStream = new System.IO.MemoryStream(cursorBytes, false); 
     System.Windows.Forms.Cursor cursor = new System.Windows.Forms.Cursor(cursorStream); 
     System.Windows.Forms.Form mainForm = new System.Windows.Forms.Form(); 
     mainForm.Cursor = cursor; 
     System.Windows.Forms.Application.Run(mainForm); 
    } 
} 

Или это:

class Program { 
    [System.STAThread] 
    static void Main(string[] args) { 
     System.Windows.Forms.OpenFileDialog openDialog = new System.Windows.Forms.OpenFileDialog(); 
     openDialog.Filter = "Cursor (*.cur)|*.cur"; 
     switch(openDialog.ShowDialog()) { 
      case System.Windows.Forms.DialogResult.OK: 
       System.Windows.Forms.Cursor cursor = new System.Windows.Forms.Cursor(openDialog.FileName); 
       System.Windows.Forms.Form mainForm = new System.Windows.Forms.Form(); 
       mainForm.Cursor = cursor; 
       System.Windows.Forms.Application.Run(mainForm); 
       break; 
     } 
    } 
} 
+0

Я не могу поднять больше флагов для этого вопроса;) –

+0

Спасибо. Но есть ли способ генерировать курсор не из встроенного ресурса, а из ресурса на моем компьютере? –

+0

См. Редактирование ... –