C# Как заменить мероприятие делегатом? - PullRequest
0 голосов
/ 18 июня 2020

Ma c OS, VS Community, C#, приложение Cocoa.

Следующий код генерирует ошибку времени выполнения.

using AppKit;
using CoreGraphics;
using Foundation;
using System;

namespace NSTextFieldValidation
{
    public partial class ViewController : NSViewController
    {
        public ViewController(IntPtr handle) : base(handle) { }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            var fm = new NSNumberFormatter { Maximum = 999, Minimum = 0 };
            NSTextField Tbx1 = new NSTextField(new CGRect(10, 50, 100, 30));
            View.AddSubview(Tbx1);
            Tbx1.Formatter = fm;
            Tbx1.Delegate = new MyTextFieldDelegate();
            Tbx1.DidFailToValidatePartialString += TbxDidFailToValidatePartialString;
        }

        private void TbxDidFailToValidatePartialString(object sender, NSControlTextErrorEventArgs e)
        {
            Console.WriteLine("DidFailToValidatePartialString activated");
        }
    }
    public class MyTextFieldDelegate : NSTextFieldDelegate
    {
        override public void EditingEnded(NSNotification notification)
        {
            Console.WriteLine("EditingEnded");
        }
    }
}

Вот исключение:

System.InvalidOperationException

Регистрация события перезаписывает существующий делегат. Либо просто используйте события, либо свой собственный делегат: NSTextFieldValidation.MyTextFieldDelegate AppKit.NSTextField + _NSTextFieldDelegate

Я понимаю, что неправильно использовать событие и делегат одновременно. Я только спрашиваю, какой метод мне нужно переопределить в моем делегате для работы с «DidFailToValidatePartialString», потому что я его не нашел (возможно, я выглядел не очень хорошо).

1 Ответ

0 голосов
/ 19 июня 2020

В классе Delegate метод DidFailToValidatePartialString не объявлен, как другие (т.е. EditingEnded). Нам нужно добавить атрибут экспорта:

[Export("control:didFailToValidatePartialString:errorDescription:")]

Я хотел бы, чтобы документация Xamarin объяснила это.

...