Использование событий из класса

Я пытаюсь заставить функцию вызываться каждый раз, когда происходит событие. В классе KinectRegion есть событие HandPointerGrip: http://msdn.microsoft.com/en-us/library/microsoft.kinect.toolkit.controls.kinectregion.handpointergrip.aspx.

Я вижу, что он объявил событие, и мне кажется, что событие уже настроено на вызов (HandPointerEventArgs)? Как мне привязать функцию к этому событию?

public Menu()
{
    KinectRegion.HandPointerGripEvent+=Hand_Gripped; // why doesn't this work? :(
}    

private void Hand_Gripped(object sender, HandPointerEvnetArgs e)
{
    MessageBox.Show("I work!"); // I wish this would work
}

Усердно работал над этой проблемой, и вот что, я думаю, сработает. Боюсь тестировать. Узнайте много нового о маршрутизируемых событиях, делегатах и ​​событиях.

namespace ...
{
    public delegate void HandPointerEventHandler(object sender, HandPointerEventArgs e);
    public partial class thePage : Page
    {
        public event HandPointerEventHandler HandGripped
        {
            add {this.AddHandler(KinectRegion.HandPointerGripEvent,value);}
            remove {this.RemoveHandler(KinectRegion.HandPointerGripEvent,vlaue);}
        }

        public thePage()
        {
            InitializeComponent();
            this.HandGripped += new HandPointerEventHandler(OnHandGripped);
        }

        protected virtual void OnHandGripped(object sender, HandPointerEventArgs e)
        {
            MessageBox.Show("hello"); //hopefully
        }
    }
}

person agorapax    schedule 17.07.2013    source источник


Ответы (2)


Первый блок кода должен работать нормально. Я предполагаю, что HandPointerGripEvent подключен нормально, он просто никогда не срабатывает.

Как вы настраиваете KinectRegion? Вы обновляете интерактивную библиотеку каждый кадр?

Возможно, это помогает? Kinect SDK 1.7: сопоставление соединений /Координаты курсора для разрешения экрана

person gareththegeek    schedule 19.07.2013
comment
Я получаю, что статическое поле только для чтения не может быть назначено для первого блока кода, а оператор += не может быть применен к группе System.Windows.RoutedEvent и методу. Я просто прибегал к использованию AddHandPointer‹EventHandlers›, например KinectRegion.AddHandPointerMoveHanlder(); Теперь я застрял на том, как создать операторы триггера для мыши. Например, когда рука нажата, я хочу, чтобы мышь щелкнула в своей текущей точке (как если бы был физический щелчок). - person agorapax; 19.07.2013

KinectRegion.AddHandPointerGripHandler(this.Button1, this.Button1_Click);

Здесь Button1 это:

< k:KinectTileButton x:Name="Button1" Height="150" Width="150" Content="Click"/ >

Пространства имен:

  • xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  • xmlns:k="http://schemas.microsoft.com/kinect/2013"

Button1_Click — это сам метод, например:

private void Button1_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("YOU GOT ME !!!");
}

Если вы хотите добавить обработчик захвата для другого объекта интерфейса, вы просто делаете:

KinectRegion.AddHandPointerGripHandler(< object name >, < method name >);

И так.

person Krasimir Kolev    schedule 27.03.2014