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