[c#]Problemen met muisbesturing

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • KillerZero86
  • Registratie: Mei 2010
  • Laatst online: 17-08 12:28
Ik probeer de muis te controleren via een programma dat ik voor de kinect heb geschreven, maar loop tegen een nogal groot probleem aan: meerdere namen verwijzen naar meerdere "usings". Ik open met het rijtje imports:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Coding4Fun.Kinect.Wpf;
using Microsoft.Research.Kinect.Audio;
using Microsoft.Research.Kinect.Nui;


En helaas heb ik al deze imports ook echt nodig, het idee is namelijk dat ik via de kinect muisbesturing krijg.
En het gaat vrij lang goed, ik kan de positie van mn rechterhand verkrijgen, deze vertalen naar een x en een y coördinaten, maar daarna gaat het heel grondig mis. Dat is in deze methode:

code:
1
2
3
4
5
6
private void setMousePosition(Joint joint)
        {
            var scaledJoint = joint.ScaleTo(1920, 1080, .4f, .4f);
            this.Cursor = new System.Windows.Forms.Cursor(System.Windows.Forms.Cursor.Current.Handle);
            System.Windows.Forms.Cursor.Position = new System.Windows.Point(scaledJoint.Position.X,       scaledJoint.Position.Y);
        }


Zoals jullie waarschijnlijk al zien kan ik niet "gewoon" cursor gebruiken, want deze bestaat in zowel System.Windows.Forms als System.Windows.Input, idem dito met point.

Het gekke is dat ik hierbij de volgende twee errors krijg:

code:
1
Error   1   Cannot implicitly convert type 'System.Windows.Forms.Cursor' to 'System.Windows.Input.Cursor'   H:\Projects\Depth and Skeletal\Depth and Skeletal\MainWindow.xaml.cs    91  27  Depth and Skeletal


en

code:
1
Error   2   Cannot implicitly convert type 'System.Windows.Point' to 'System.Drawing.Point' H:\Projects\Depth and Skeletal\Depth and Skeletal\MainWindow.xaml.cs    92  52  Depth and Skeletal


Waar ga ik de mist in? Want volgens mij probeer ik geen van de dingen die de fout aangeven.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Slaat die foutmelding op 't blokje code (setMousePosition...) dat je post of gaat 't elders fout? Als het in dat blokje fout gaat dan ben ik eens benieuwd wat "this" is. Laat maar; ik zie 't al:
using Coding4Fun.Kinect.Wpf;
...
Error 1 Cannot implicitly convert ... MainWindow.xaml.cs
Het was wel handig geweest als je even had verteld dat 't een WPF project betreft: daar is een Cursor namelijk van 't type System.Windows.Input.Cursor i.t.t. een Cursor in WinForms projecten die van 't type System.Windows.Forms.Cursor is ;) En daar heb je je verklaring van je foutmelding ;) En met een beetje logisch nadenken kun je de tweede foutmelding dan ook verklaren ;)

Wist je trouwens dat je die using kunt aliassen?

[ Voor 62% gewijzigd door RobIII op 26-10-2011 19:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RobIII schreef op woensdag 26 oktober 2011 @ 18:53:
[...]
Wist je trouwens dat je die using kunt aliassen?
Je zult inderdaad een alias voor je type of je namespace moeten maken, of gebruik maken van Fully Qualified Type Names.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Woy schreef op woensdag 26 oktober 2011 @ 19:05:
of gebruik maken van Fully Qualified Type Names.
Dat doet 'ie toch? Of zie ik iets over het hoofd? 't Probleem is dat 'ie de Cursor uit de verkeerde namespace probeert te assignen aan this.Cursor.

Een alias maakt 't in dit geval alleen wat minder "omslachtig":
C#:
1
var x = new System.Windows.Forms.Cursor(...);
Kan ook zo:
C#:
1
2
using q =  System.Windows.Forms;
var x = new q.Cursor(...);

[ Voor 46% gewijzigd door RobIII op 26-10-2011 19:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik heb de code niet gelezen, maar in de post staat dat het volgende het probleem is
Zoals jullie waarschijnlijk al zien kan ik niet "gewoon" cursor gebruiken, want deze bestaat in zowel System.Windows.Forms als System.Windows.Input, idem dito met point.
Het is dus gewoon een kwestie van het juiste type gebruiken, en om ambiguïteit te voorkomen zul je de juiste alias of fqn moeten gebruiken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RobIII schreef op woensdag 26 oktober 2011 @ 19:05:
[...]
Een alias maakt 't in dit geval alleen wat minder "omslachtig":
C#:
1
var x = new System.Windows.Forms.Cursor(...);
Kan ook zo:
C#:
1
2
using q =  System.Windows.Forms;
var x = new q.Cursor(...);
Ik zou wel een iets duidelijkere alias bedenken voor de namespace, of gewoon het type zelf aliassen. ( Volgens mij krijgt een alias "Cursor" zelfs prioriteit zodat je in je code gewoon Cursor als type name kan gebruiken. )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Woy schreef op woensdag 26 oktober 2011 @ 19:10:
Het is dus gewoon een kwestie van het juiste type gebruiken
En dat is 't probleem
Woy schreef op woensdag 26 oktober 2011 @ 19:10:
en om ambiguïteit te voorkomen zul je de juiste alias of fqn moeten gebruiken.
Die ambiguïteit is er niet; hij gebruikt fqn's. Alleen gebruikt 'ie cursor uit de verkeerde namespace ;)
Woy schreef op woensdag 26 oktober 2011 @ 19:13:
Ik zou wel een iets duidelijke alias bedenken voor de namespace
D'uh :P Het ging om 't illustreren dat 't "korter" kan ;)
Woy schreef op woensdag 26 oktober 2011 @ 19:13:
of gewoon het type zelf aliassen. ( Volgens mij krijgt een alias "Cursor" zelfs prioriteit zodat je in je code gewoon Cursor als type name kan gebruiken. )
Dat is mij verder niet bekend; zou goed kunnen. Heb je een voorbeeldje?

[ Voor 36% gewijzigd door RobIII op 26-10-2011 19:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RobIII schreef op woensdag 26 oktober 2011 @ 19:13:
[...]
Die ambiguïteit is er niet; hij gebruikt fqn's. Alleen gebruikt 'ie cursor uit de verkeerde namespace ;)
Dan moet hij niet zeggen dat het probleem is dat het type in beide namespaces voorkomt ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • KillerZero86
  • Registratie: Mei 2010
  • Laatst online: 17-08 12:28
Ik had geen idee dat het in een WPF spontaan anders ging werken, om eerlijk te zijn. Ik had de code van MSDN gehaald en liep volkomen vast op die error, die mijns inziens inhield dat hij om de een of andere reden probeerde uit de verkeerde reference die methode te pakken. Maar de combo set mouse position en wpf helpt me al een aardig stuk verder, hoewel het lijkt alsof er niet direct 1 goede functie voor is.

Bedankt voor de tip, iig =)

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RobIII schreef op woensdag 26 oktober 2011 @ 19:13:
[...]
Dat is mij verder niet bekend; zou goed kunnen. Heb je een voorbeeldje?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Windows.Forms;
using System.Windows.Input;

using Cursor = System.Windows.Forms.Cursor;

namespace WpfApplication1
{
    class Test
    {
        public void Test()
        {
            var cursor = new Cursor(IntPtr.Zero);
        }
    }
}

Op deze manier kun je zelf bepalen naar welk type "Cursor" wijst. Als je beide types door elkaar heen nodig hebt is dat natuurlijk niet handig, maar vaak zul je maar 1 van de 2 types nodig hebben.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ah, cool. Zo simpel :P Als ik al alias, want dat komt sowieso zelden voor, dan alias ik altijd namespaces. Wist niet dat 't ook voor types ging, maar then again best voor de hand liggend :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 14:44
ReSharper zegt zelf al dat er conflicten zijn en vraagt welk concreet type je wil gebruiken. Handy.
Pagina: 1