Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Maus Zeiger auf Form1 auf Form2 anzeigen und steuern
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

Maus Zeiger auf Form1 auf Form2 anzeigen und steuern

beantworten | zitieren | melden

Hallo,

folgender Aufbau bereitet mir noch Probleme. Ich programmiere eine Multimonitoranwendung mit Browserfunktion, einem Touchscreen und einem weiteren Bildschirm.

Daten:
Touchscreen 480*640 Pixel, Form1 mit UserControl Bildschirmtastatur, URL Textbox und Go-Button
Bildschirm 1280*390 Pixel, Form2 mit Webbrowserfenster

Die URL Eingabe erfolgt über eine Bildschirmtastatur, nach dem drücken des Go-Button wird wird die Bildschirmtastatur, URL Textbox und Go-Button ausgeblendet.

Problem:
Nach der Eingabe soll das Touchscreen als Touchpad wie bei einem Laptop funktionieren, aber wie bringe ich dem Mousezeiger bei das er sich nur nur in Form2 bewegen darf und von Form1 aus gesteuert werden kann.

Gruss
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Simon Heinzmann am .
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Nachtrag:

Die Control.MousePosition.X ich nicht ändern.
Zitat
Der Rückgabewert "System.Windows.Forms.Control.MousePosition" kann nicht geändert werden, da er keine Variable ist.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Simon Heinzmann am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

du kannst dem mousezeiger eine clientarea zuweisen (Cursor.Clip), die er dann nciht verlassen kann.

wie sich das dann verhält, wenn du auf dem touchscreen rumdrückst weiß ich allerdings nciht. wenn du glück hast werden die mouseevents trotzdem geworfen, dann müsstest du nur die koordinaten übertragen (Cursor.Position). ansonsten sieht es ziemlich schlecht aus.
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.488

beantworten | zitieren | melden

Mit der globalen Klasse 'Cursor' kannst du die Mausposition setzen als auch evtl. Clipping durchführen:


Cursor.Position = new Point(x, y);

Cursor.Clip = new Rectangle(x, y, w, h);
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Hi,

danke für die Tips an The69 und JAck30lena, ich verschieb einfach den Mauszeiger nach links weil dort in der Windowskonfiguration der Monitor mit Form2 angeordnet ist.

        private void FormBrowserSteuerung_MouseMove(object sender, MouseEventArgs e)
        {

            if (Control.MousePosition.X > 0 && Control.MousePosition.X < 480)
            {
                // this.Cursor = new Cursor(Cursor.Handle);
                Cursor.Position = new Point((Cursor.Position.X * 3) - 1280, Cursor.Position.Y);
            }
        }
Das gleiche hab ich mit MouseDown und Mouse Up gemacht.

Die Mouse gewegt sich wunderbar auf Form2 aber ich kann keine Links anklicken, habt ihr da irgendwelche Ideen?

Gruss
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

http://www.pinvoke.net/default.aspx/user32.mouse_event

damit kannst du ein klick auf einer bestimmten position auslösen.
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Hi,
das mit dem Klicken funktioniert wunderbar. Die ganze Steuerung ist durch die Multiplikation und die unschärfe des Touchscreens nicht brauchbar.

Meine Neue Idee ist es wie bei einem Touchpad auf einem Laptop zu lösen, d.h. die Verschiebung des Cursor erfolgt 1:1 zu dem der Bewegung auf dem Touchscreen.


        // Mouseposition         
        int x;
        int y;
        // Ausgangsmauskoordinaten
        int AusgangsKordsX;
        int AusgangsKordsY;

        private void FormBrowserSteuerung_MouseMove(object sender, MouseEventArgs e)
        {
            // Touchscreenfläche
            if (e.X > 0 && e.X < 480 && e.Y < 500)
            {
  
                // Berechnung der Koordinaten
                x = x + (e.X - AusgangsKordsX);
                y = y + (e.Y - AusgangsKordsY);

                // Ausgangskoordinaten setzen
                AusgangsKordsX = e.X;
                AusgangsKordsY = e.Y;

                // Cursor Position setzen
                Cursor.Position = new Point(x, y);
            }
Ich komme damit nicht über den Touchscreen Bildschirm hinaus... Ich finde einfach nicht den fehler in der Logik.

Gruss und Danke
private Nachricht | Beiträge des Benutzers
Daniel83
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Bielefeld Deutschland

beantworten | zitieren | melden

Hallo

Das problem ist das du e.X- Ausgangkordinaten rechnest.

Wenn du am ende angekommen bist, angenommen an der rechten seit, dann setzt du ja bei einem Touchpad Links wieder neu an. betrachte nur die X Position

x = 400
AusgangsPos =401
e.X umgesetzt ist 2

jetzt rechnest du

x= 400+(2-401)
also
400+(-399)
ist also 1

durch dieses Verhältnis kannst du nie größer werden als die Fläche deines Touchpanels. Hier müsstes du Plus rechnen, weiß nur nicht ob du dann kleiner als die Ausgangsposition werden kannst, rechne doch mal einfach ein paar varianten durch
private Nachricht | Beiträge des Benutzers
Daniel83
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Bielefeld Deutschland

beantworten | zitieren | melden

AusgangsKords ist doch eigentlcih gleich x bzw Y oder?

du verwendest deine alte funktion und baust das hier mit ein

also
tmp=2-401 (ersterfall, weiter nach rechts)
tmp=401-2 (zeiterfall, weiter nach links)


if (tmp!=1||tmp!=-1)//nur dann wird ja gesprungen
{
if (tmp<0)
{
    tmp+=AusgangsKords;  //hier wieder 2 (-399+401)
//bewegung um 2 nach rechts
}else
{
if (tmp>0)
{
   tmp-=Ausgangskords  //also(399-401) resultat-2
}
}

}
x=x+tmp;
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Hi,

ich komm irgendwie nicht weiter, der Cursor kommt einfach nicht über die Touchscreenfläche hinaus

public partial class FormBrowserSteuerung : Form
    {
        public FormBrowserSteuerung()
        {
            InitializeComponent();
        }
        // Variablendeklaration        
        int ausgangsKordsX;
        int ausgangsKordsY;
        int absolutKordsX;
        int absolutKordsY;        

        private void FormBrowserSteuerung_MouseMove(object sender, MouseEventArgs e)
        {
            // Touchscreenfläche
            if (e.X > 0 && e.X < 480 && e.Y < 500)
            {
                // Berechnung der Koordinaten
                int verschiebungX = MousePosition.X - ausgangsKordsX;
                int verschiebungY = MousePosition.Y - ausgangsKordsY;

                absolutKordsX += verschiebungX;
                absolutKordsY += verschiebungY;

                ausgangsKordsX = MousePosition.X;
                ausgangsKordsY = MousePosition.Y;

                Cursor.Position = new Point(absolutKordsX, absolutKordsY);

            }
         }
    }

Kann es sein das jedes mal wenn MouseMove ausgeführt wurde die Werte ausgangsKordsX usw. nicht gespeichert werden.

Bin für jeden Tip dankbar.

Gruss
Simon
private Nachricht | Beiträge des Benutzers
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

Mahlzeit,

hat keiner eine Idee, bin vollkommen ratlos wo das Problem liegen könnte.

Gruss
Simon
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

was sagt der debugger zu den koordinaten?
Simon Heinzmann
myCSharp.de - Member

Avatar #avatar-2571.jpg


Dabei seit:
Beiträge: 43
Herkunft: Bayern

Themenstarter:

beantworten | zitieren | melden

der Debugger wirft keinen Fehler, der Mauszeiger bewegt bzw. springt genau dahin wo mein finger ist.
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

mir ist klar das der debugger keine fehler anzeigt. (werfen tut er sie hoffentlich nie).
ich wollte wissen ob laut debugger die koordinaten richtig sind. ob die berechnung auch passt. ob nciht doch irgendwo ein lasches zwischenergebniss vorliegt....
Daniel83
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Bielefeld Deutschland

beantworten | zitieren | melden

hab dir doch ne idee geschrieben, hast du die Probiert, wenn diese FGunktion im Mouse Move Event kommt, dann versuch doch mal die abfrage ob die abweichung gleich 1 ist, wie oben beschrieben
private Nachricht | Beiträge des Benutzers
Daniel83
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Bielefeld Deutschland

beantworten | zitieren | melden

Ok ich habe kurz nochmal nachgedacht.

Du musst dir die Koordinaten auf dem Panel und die Koordinaten auf dem Monitor merken.

Wenn die änderung auf dem Pannel !=1 oder !=-1 ist, musst du nur die neuen Panelkoordinaten in den Variablen speichern.

Ansonsten bildest du die differenz der alten und neuen Panell koordinaten und addierst die zu denen auf dem Monitor, und speicherst die neuen Panelkoordinaten ab.

Versuch das mal, sollte gehen
private Nachricht | Beiträge des Benutzers