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
Bildschirmtastatur für (in) abgeleitete TextBox nicht sichtbar
smalldevice
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

Bildschirmtastatur für (in) abgeleitete TextBox nicht sichtbar

beantworten | zitieren | melden

Salve Gemeinde,

Ich möchte das TextBox-Steuerelement ableiten um für Touchscreens beim Eintritt in die Textbox eine Bildschirmtastatur (zur Eingabe in die entsprechende Textbox) einblenden zu können.
Das Control der Bildschirmtastatur funktioniert (ist schon getestet).

Wenn ich allerdings versuche die Bildschirmtastatur beim Eintritt in meine abgeleitetet TextBox anzeigen zu lassen geschieht gar nichts.
Beim Hineindebuggen sind alle Werte korrekt gesetzt aber es passiert nix.

Für eine kleine Hilfe wäre ich sehr dankbar.

Michael

Hier der relevante code:

namespace Autark.UI
{
    public class AutarkTextBox : TextBox
    {
        #region Klassenvariablen


        #endregion Klassenvariablen

        /// <summary>
        /// Erzeugt eine neue Instanz
        /// </summary>
        public AutarkTextBox()
        {

        }

        protected override void OnEnter(EventArgs e)
        {
            base.OnEnter(e);
            KeyBoard cAutarkKeyboard = new KeyBoard();
            this.Controls.Add(cAutarkKeyboard);
            cAutarkKeyboard.UseWith(this);
        }
    }
}


namespace Autark.UI
{
    /// <summary>
    /// Dieses Usercontroll stellt ein Bildschirmkyboard zur Dateneingabe über einen Touchscreen zur Verfügung.
    /// </summary>
    public partial class KeyBoard : AutarkUserControl
    {
        /// <summary>
        /// Stellt das AutarkKeyboard Usercontrol als Tastatur für Eingaben auf einem Touchscreen zur Verfügung.
        /// </summary>
        /// <param name="textobject">Zu bearbeitendes Objekt</param>
        public void UseWith(object textobject)
        {
            cTextObject = textobject;
            
            if (cTextObject.GetType() == typeof(AutarkTextBox)) cMerkText = ((AutarkTextBox)cTextObject).Text;
            else return;

            TxtBoxPos = SelStart(); // Cursorzeiger setzen

            // Tastaturposition
            int b = SystemInformation.VirtualScreen.Width;
            int h = SystemInformation.VirtualScreen.Height;
            Point p = new Point(0, 0);

            // absolute Koordinaten des Controls ermitteln
            if (cTextObject.GetType() == typeof(AutarkTextBox)) p = ((AutarkTextBox)cTextObject).PointToScreen(new Point(0, 0));
            else return;

            // Position der Tastatur ermitteln
            int kbd_bx = this.Width;  // Breite Tastatur
            int kbd_hx = this.Height; // Höhe Tastatur
            int x = p.X, y = 0;
            if (p.Y + kbd_hx > h) y = p.Y - kbd_hx - 23;
            else y = p.Y;
            if (p.X + kbd_bx > b) x = b - kbd_bx;

            // Position der Tastatur setzen
            this.Location = new Point(x, y);
            this.Show();
            this.BringToFront();
        }

            /// <summary>
        /// Cursorposition im Eingabefeld ermitteln.
        /// </summary>
        /// <returns>Cursorposition</returns>
        private int SelStart()
        {
            int CurPos = 0;
            if (cTextObject.GetType() == typeof(AutarkTextBox)) CurPos = ((AutarkTextBox)cTextObject).SelectionStart;
            return CurPos;
        }
    }
private Nachricht | Beiträge des Benutzers
telfa
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Rheinbach

beantworten | zitieren | melden

Hallo smalldevice,
mir fällt auf das du das Keyboard als Control innerhalb der TextBox unterbringen willst.
Ist das so gewollt? Oder in den Parent der TextBox?

Viele Grüße,
telfa
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4189

beantworten | zitieren | melden

Hallo,

da die Position des Keyboards ja per PointToScreen ermittelt wird und es über der Form angezeigt werden soll, macht es Sinn, daß das Keyboard-Control gar keinem Parent zugeordnet wird (denn sonst kann es ja nur innerhalb des Parent-Rechtecks angezeigt werden!).

Evtl. muss es aber dann dem Desktop untergeordnet werden, s. Aufruf von GetDesktopWindow() in Unfocusable, borderless form, perfect for floating controls! (die Style-Sachen sind hierfür irrelevant).

PS: Anstatt mittels "typeof(AutarkTextBox)" zu prüfen, solltest du besser [FAQ] Casten aber richtig: () / is / as verwenden.
Bzw. wäre es nicht sinnvoller gleich Control anstatt object als Parameter zu verwenden?!?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo smalldevice,

siehe Control wird nicht angezeigt [==> Liste möglicher Gründe]

Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 1.1 (und fast schon 1.1.1).

herbivore
private Nachricht | Beiträge des Benutzers