Laden...

Bildschirmtastatur für (in) abgeleitete TextBox nicht sichtbar

Erstellt von smalldevice vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.939 Views
Thema geschlossen
S
smalldevice Themenstarter:in
10 Beiträge seit 2012
vor 10 Jahren
Bildschirmtastatur für (in) abgeleitete TextBox nicht sichtbar

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;
        }
    }
T
156 Beiträge seit 2012
vor 10 Jahren

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

4.942 Beiträge seit 2008
vor 10 Jahren

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?!?

49.485 Beiträge seit 2005
vor 10 Jahren

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

Thema geschlossen