Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Leertaste unterdrücken

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !
Autor Thema:  Leertaste unterdrücken (1466 mal gelesen)
DerBrain87
Mitglied
Mathematiker


Sehen Sie sich das Profil von DerBrain87 an!   Senden Sie eine Private Message an DerBrain87  Schreiben Sie einen Gästebucheintrag für DerBrain87

Beiträge: 84
Registriert: 29.04.2015

Inventor 2021 & VisualStudio 2017

erstellt am: 17. Dez. 2015 11:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo liebes Forum,
Vor kurzem habe ich begonnen ein AddIn für Inventor zu schreiben. Nach längerer Recherche und etwas rumärgeren hat das AddIn auch gemacht was es sollte, nämlich über ein Button in der Ribbon ein Formular öffen.
Der Aufruf der Form erfolgt über:
Code:

        Public Sub mBD_Click(ByVal Context As Inventor.NameValueMap) Handles mBD.OnExecute
            Try
                dim param() as object = ermittleParameterFuerDasForm()
                Dim frm As New frmiPropertyEditor(param)
                frm.Show()
            Catch ex As Exception
                MsgBox(ex.ToString(), MsgBoxStyle.Critical, "Unbehandelter Fehler")
            End Try
        End Sub


Ich habe mich absichtlich für .Show() und nicht .ShowDialog() entschieden, da der Benutzer weiterhin in Inventor arbeiten können sollen.

Nun mein Problem:
In meinem Formular sind mehrere Textboxen beinhaltet in denen ein Benutzer Daten eingeben kann.
Dummerweiße meint Inventor, sobald der Benutzer die Leertaste drückt, dass es den letzten Befehl wiederholen soll.
Hat mein Formular den Fokus, ist die Warscheinlichkeit, dass das gedrückte Leerzeichen in eine Textbox gehört, jedoch wesentlich höher wie dass Inventor gemeint ist.

Daher soll Inventor von Leerzeichen die gedrückt wurden, solange mein Formular den Fokus hat doch bitte nichts von mitbekommen. - Lieder weiß ich nicht genau, wie ich das meinem AddIn und Inventor beibringen soll:-(


Vor langer Zeit beschäftigte ich mich mal mit dem Abfangen von Windows-Events (was der KeyPress des Leerzeichen ja auch sein müsste). Leider ist es zulange her, bezog sich nur auf das Mausrad und war in VB6. Zudem bin ich mir auch nicht sicher, ob das der richtige Weg ist/wäre.


Vielen Dank im Vorraus
DerBrain87

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chris 31
Mitglied
Konstrukteur und Mädchen für alles


Sehen Sie sich das Profil von Chris 31 an!   Senden Sie eine Private Message an Chris 31  Schreiben Sie einen Gästebucheintrag für Chris 31

Beiträge: 575
Registriert: 23.04.2013

Inventor 2015 Professional
Windows 7 64 bit
16GB RAM
nVidia Quadro 600

erstellt am: 21. Dez. 2015 07:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DerBrain87 10 Unities + Antwort hilfreich

Ich hab hier mal was. In die Form ein zu tragen:

Code:
    Private Sub Form_keydown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Windows.Forms.Keys.Space Then
            'hier irgendwas tun...
        End If
    End Sub

------------------
MFG

Chris

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DerBrain87
Mitglied
Mathematiker


Sehen Sie sich das Profil von DerBrain87 an!   Senden Sie eine Private Message an DerBrain87  Schreiben Sie einen Gästebucheintrag für DerBrain87

Beiträge: 84
Registriert: 29.04.2015

Inventor 2021 & VisualStudio 2017

erstellt am: 21. Dez. 2015 09:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nope, dass ist es leider nicht.
Das Event KeyDown mit e.KeyCode = Keys.Space kommt nicht mal im Formular an. :-(
Soll heißen, wenn ich "'hier irgendwas tun..." einfach durch msgbox("") ersetze, geht nichtmal die Box auf...
Erschwerend kommt ja noch dazu, dass ich, wenn die Leertaste gedrückt wird nicht wirklich etwas tun möchte - ich möchte lediglich, dass Inventor nicht seinen letzten Befehl wiederholt und das Leerzeichen genau das macht, was es eben macht, wenn das Formular via showDialog geöffnet wird.

Sry, falls meine ursprüngliche Frage diesbezüglich evtl. etwas verwirrend formuliert war.

Gruß DerBrain87

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chris 31
Mitglied
Konstrukteur und Mädchen für alles


Sehen Sie sich das Profil von Chris 31 an!   Senden Sie eine Private Message an Chris 31  Schreiben Sie einen Gästebucheintrag für Chris 31

Beiträge: 575
Registriert: 23.04.2013

Inventor 2015 Professional
Windows 7 64 bit
16GB RAM
nVidia Quadro 600

erstellt am: 21. Dez. 2015 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DerBrain87 10 Unities + Antwort hilfreich

Nur mal so eine Frage: Kannst du überhaupt irgendwas in deine Form eingeben? Wenn ich eine Form mit .show aufrufe, dann kann ich dort gar keine Eingaben machen.

------------------
MFG

Chris

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DerBrain87
Mitglied
Mathematiker


Sehen Sie sich das Profil von DerBrain87 an!   Senden Sie eine Private Message an DerBrain87  Schreiben Sie einen Gästebucheintrag für DerBrain87

Beiträge: 84
Registriert: 29.04.2015

Inventor 2021 & VisualStudio 2017

erstellt am: 21. Dez. 2015 13:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Funktioniert bei mir nahezu einwandfrei - mit Ausnahme der Leertaste (und Enter-Taste wie ich seit neuestem festgestellt habe).
Ich habe mal weiter geforscht, ob ich die selben Probleme mit 'q', 'r', 'm', 's' etc. (also den Buchstaben die ohne Kombination mit 'Alt' oder 'Strg' ein Inventor-Shortcut sind) haben. Was mich total überrascht hat: Die Antwort lautet Nein. Ich kann jeden beliebigen Buchstabe ohne Einschränkungen in meine Form klatschen.

Gruß DerBrain87

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chris 31
Mitglied
Konstrukteur und Mädchen für alles


Sehen Sie sich das Profil von Chris 31 an!   Senden Sie eine Private Message an Chris 31  Schreiben Sie einen Gästebucheintrag für Chris 31

Beiträge: 575
Registriert: 23.04.2013

Inventor 2015 Professional
Windows 7 64 bit
16GB RAM
nVidia Quadro 600

erstellt am: 22. Dez. 2015 07:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DerBrain87 10 Unities + Antwort hilfreich

Solange deine Form nicht den Focus hat, kann die msgbox auch nicht erscheinen. Du müsstest die "Befehlswiederholfunktion" von Inventor ausschalten um dein Problem zu beheben. Ich habe aber keine Einstellung finden können, in der man das ausstellen könnte.
Alternative wäre nur die Form eben doch über .showDialog einblenden, nachdem die erforderlichen Arbeiten im Inventor gemacht wurden.

------------------
MFG

Chris

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DerBrain87
Mitglied
Mathematiker


Sehen Sie sich das Profil von DerBrain87 an!   Senden Sie eine Private Message an DerBrain87  Schreiben Sie einen Gästebucheintrag für DerBrain87

Beiträge: 84
Registriert: 29.04.2015

Inventor 2021 & VisualStudio 2017

erstellt am: 22. Dez. 2015 07:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Die Idee mit dem "Befehlswiederholfunktion ausschalten" hatte ich auch schon - aber ebenfalls leider nichts gefunden:-(
Ebenso ist mir durchaus bewusst, dass die Notlösung .showDialog ist (so hab ich es momentan an meine Mitarbeiter auch verteilt).

Meine Hoffnung war, dass ich (da das ausschalten nicht existiert) über API oder so, mir gready das KeyPress-Event in meine Form hole.
Hier würde ich dann gern überprüfen ob die Leertaste gedrückt wurde. Wenn nicht, soll das Event einfach weitergereicht werden. Wenn der KeyPress die Leertaste war und die Form den Fokus hat (das sollte ich ja via Me.hasFocus oder sowas ermitteln können) würde ich gern für die anderen Anwendungen die auf ein KeyPress-Event warten  (hauptsächlich Inventor) selbiges gern schlucken.
Liegt ich hier mit meiner Idee im nicht realisierbaren?

Gruß DerBrain87

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

daywa1k3r
Moderator
Softwareentwickler




Sehen Sie sich das Profil von daywa1k3r an!   Senden Sie eine Private Message an daywa1k3r  Schreiben Sie einen Gästebucheintrag für daywa1k3r

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 22. Dez. 2015 09:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DerBrain87 10 Unities + Antwort hilfreich

Guten Morgen.

Mach eine Klasse clsWindowWrapper.cs und kopiere folgenden Inhalt rein:

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace InventorToolBox
{
    /// <summary>
    /// Contains all properties, events and methods necessary to convert a window handle to a IWin32Window
    /// </summary>
    public class clsWindowWrapper : System.Windows.Forms.IWin32Window
    {
        #region Private members
        private IntPtr _hwnd;
        #endregion

        #region Constructors
        /// <summary>
        /// Creates a new instance of the window wrapper class
        /// </summary>
        /// <param name="WindowHandle">Represents the window handle necessary to obtain the IWin32Window</param>
        public clsWindowWrapper(IntPtr WindowHandle)
        {
            //Assign arguments
            _hwnd = WindowHandle;
        }

        /// <summary>
        /// Creates a new instance of the window wrapper class
        /// </summary>
        /// <param name="WindowHandle">Represents the window handle number necessary to obtain the IWin32Window</param>
        public clsWindowWrapper(int WindowHandle)
        {
            //Assign arguments
            _hwnd = new IntPtr(WindowHandle);
        }
        #endregion

        #region Properties
        /// <summary>
        /// Gets the window handle
        /// </summary>
        public IntPtr Handle
        {
            get { return _hwnd; }
        }
        #endregion
    }
}


In dem StandardAddInServer.cs erstellst du ein Feld und einen Accessor:

Code:

        static IWin32Window _invMainFrame = null;
       
        public static IWin32Window InvMainFrame
        {
            get
            {
                if (_invMainFrame == null)
                {
                    _invMainFrame = new clsWindowWrapper((System.IntPtr)InvApp.MainFrameHWND);
                }
                return _invMainFrame;
            }
        }

Deine Form rufst du nun mit:

Code:

Form myForm = new Form();
myForm.Show(InvMainFrame);

Nein, ich übersetze das nicht ins VB.NET. 

------------------
Grüße Igor

FX64 Software Solutions - Inventor Tools
FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DerBrain87
Mitglied
Mathematiker


Sehen Sie sich das Profil von DerBrain87 an!   Senden Sie eine Private Message an DerBrain87  Schreiben Sie einen Gästebucheintrag für DerBrain87

Beiträge: 84
Registriert: 29.04.2015

Inventor 2021 & VisualStudio 2017

erstellt am: 08. Jan. 2016 10:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo und gutes neues Jahr erstmal:-)

Das sieht schon verdammt hübsch aus! Erstmals vielen Dank.
Fast hätte ich dein

Zitat:
Nein, ich übersetze das nicht ins VB.NET.
überlesen^^
Ich müsste dein tollen - ich denke C#-Code? - ja 1:1 ins VB.NET übersetzen können, oder?

Gruß DerBrain87

p.s. wenn du mir jetzt noch mein "'Nur Rasteransicht' deaktivieren"-Problem lösst bist du mein Gott:-)

[Diese Nachricht wurde von DerBrain87 am 08. Jan. 2016 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DerBrain87
Mitglied
Mathematiker


Sehen Sie sich das Profil von DerBrain87 an!   Senden Sie eine Private Message an DerBrain87  Schreiben Sie einen Gästebucheintrag für DerBrain87

Beiträge: 84
Registriert: 29.04.2015

Inventor 2021 & VisualStudio 2017

erstellt am: 08. Jul. 2021 10:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

was lange währt wird endlich gut:-)
Ich muss gestehen, ich hatte dieses Problem schon ganz vergessen, da ich damals eine Notlösung gefunden hatte.
Heute habe ich an einer anderen Stelle das gleiche Problem bekommen und mich an diesen Thread erinnert.
In dem aktuellen Fall konnte ich die Notlösung mit ShowDialog nicht gebrauchen.
Der Code von daywa1k3r hat bis auf zwei Kleinigkeiten wunderbar funktioniert.

Da ich diese Funktion allgemein sehr nützlich finde, habe ich mich entschlossen, diesen Beitrag nach so langer Zeit als erfolgreich erledigt zu markieren.
Folgende Anpassungen musste ich (neben der Übersetzung nach VB.NET) vornehmen:

    - Der Cast beim Erzeugen des Wrapper-Objekts ist weggefallen.
      InvApp.MainFrameHWND gibt (zumindest bei VB.NET) einen Integer zurück.
      Da in dieser Wrapper-Klasse ein Konstruktor für Integer vorhanden ist, habe ich auf den Cast verzichten können.
    Code:
    _invMainFrame = new clsWindowWrapper((System.IntPtr)InvApp.MainFrameHWND); // Alt
    _invMainFrame = new clsWindowWrapper(InvApp.MainFrameHWND); //Neu

    - Das Feld _invMainFrame sowie sein Accessor funktionierten nicht als Static (bzw. Shared in meinem Fall)
      Nachdem ich das Shared (bzw. Static) entfernt habe hats einwandfrei funktioniert

In diesem Falle nochmals herzlichen Dank an alle die mir geholfen haben und explizit an daywa1k3r!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bietus
Mitglied
Konstrukteur

Sehen Sie sich das Profil von bietus an!   Senden Sie eine Private Message an bietus  Schreiben Sie einen Gästebucheintrag für bietus

Beiträge: 1
Registriert: 24.03.2024

erstellt am: 24. Mrz. 2024 12:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DerBrain87 10 Unities + Antwort hilfreich

ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!


Zitat:
Original erstellt von DerBrain87:
was lange währt wird endlich gut:-)
Ich muss gestehen, ich hatte dieses Problem schon ganz vergessen, da ich damals eine Notlösung gefunden hatte.
Heute habe ich an einer anderen Stelle das gleiche Problem bekommen und mich an diesen Thread erinnert.
In dem aktuellen Fall konnte ich die Notlösung mit ShowDialog nicht gebrauchen.
Der Code von daywa1k3r hat bis auf zwei Kleinigkeiten wunderbar funktioniert.

Da ich diese Funktion allgemein sehr nützlich finde, habe ich mich entschlossen, diesen Beitrag nach so langer Zeit als erfolgreich erledigt zu markieren.
Folgende Anpassungen musste ich (neben der Übersetzung nach VB.NET) vornehmen:

    - Der Cast beim Erzeugen des Wrapper-Objekts ist weggefallen.
      InvApp.MainFrameHWND gibt (zumindest bei VB.NET) einen Integer zurück.
      Da in dieser Wrapper-Klasse ein Konstruktor für Integer vorhanden ist, habe ich auf den Cast verzichten können.
    Code:
    _invMainFrame = new clsWindowWrapper((System.IntPtr)InvApp.MainFrameHWND); // Alt
    _invMainFrame = new clsWindowWrapper(InvApp.MainFrameHWND); //Neu

    - Das Feld _invMainFrame sowie sein Accessor funktionierten nicht als Static (bzw. Shared in meinem Fall)
      Nachdem ich das Shared (bzw. Static) entfernt habe hats einwandfrei funktioniert

In diesem Falle nochmals herzlichen Dank an alle die mir geholfen haben und explizit an daywa1k3r!


Hallo und guten Tag. Ich habe mit großem Interesse des Thread gelesen. Ich habe zZt. das gleiche Problem mit Enter und Leertaste bei Inventor.
Ich programmiere ebenfalls in VB.Net, jedoch scheitere ich an der Übersetzung des C-Codes.

Besteht die Möglichkeit, die Implementierung aus deiner Lösung einsehen zu dürfen?
Das würde mich echt nach vorne bringen.

Jetzt schon mal vielen Dank...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz