2014-01-28 1 views
-1

Как установить NULL для метода экземпляра, который не может быть NULL?C# - Как установить NULL для метода экземпляра, который не может быть NULL?

Сообщение об ошибке: Der Delegat einer Instanzenmethode kann kein "this" von NULL haben.

Проблема заключается в том, что у меня есть метод создания события щелчка MenuItem для запуска чего-либо. Но в одном случае нет события щелчка, поэтому мне нужно установить параметр в NULL. C# это не нравится. Ты знаешь почему?

public MenuItem SetMenuitem(string IconSource, RoutedEventHandler Click, string Header, string IGT, string Name) 
    { 
     Image Icon = new Image(); 
     Icon.Source = new BitmapImage(new Uri(IconSource, UriKind.Relative)); 
     Icon.Height = 16; 
     Icon.Width = 16; 
     Icon.Stretch = Stretch.None; 

     MenuItem MenuItem = new MenuItem(); 
     MenuItem.Click += new RoutedEventHandler(Click); 
     MenuItem.Header = Header; 
     MenuItem.Icon = Icon; 
     MenuItem.InputGestureText = IGT; 
     MenuItem.Name = Name; 
     MenuItem.Padding = new Thickness(5); 

     return MenuItem; 
    } 

Вот пример, где второй параметр установлен в нуль Потому что событие нажмите не требуется:

MI_Layout = SetMenuitem(@"IMAGES\icon.png", null, MI_Layout_Header, null, MI_Layout_Name); 

ответ

1

Выполните проверку для параметра Click

if(Click != null) 
MenuItem.Click += new RoutedEventHandler(Click); 

Лично , что-то не так с дизайном, если вы передаете требуемые параметры для события Click, я бы определил действие, чтобы прикрепить его к вызывающему методу.

+0

Поскольку самый простой способ решения проблемы главным образом, кажется, слишком просто, чтобы думать. Спасибо, это помогло решить проблему. – gpuk360

1

Вы должны просто создать другую функцию с тем же именем, которая не включает параметр, а затем не устанавливает событие click. Вместо передачи в NULL вызовите эту функцию.

Пример:

public MenuItem SetMenuitem(string IconSource, string Header, string IGT, string Name) 
{ 
    Image Icon = new Image(); 
    Icon.Source = new BitmapImage(new Uri(IconSource, UriKind.Relative)); 
    Icon.Height = 16; 
    Icon.Width = 16; 
    Icon.Stretch = Stretch.None; 

    MenuItem MenuItem = new MenuItem(); 
    MenuItem.Header = Header; 
    MenuItem.Icon = Icon; 
    MenuItem.InputGestureText = IGT; 
    MenuItem.Name = Name; 
    MenuItem.Padding = new Thickness(5); 

    return MenuItem; 
} 
Смежные вопросы