2011-11-05 1 views
0

Utilisation du panneau de saisie (SIP) pour saisir du texte sur mon application C# WinMobile CF 2.0.C# Windows Mobile SIP InputPanel: Comment redimensionner ma TextBox?

Il y a une zone de texte en bas que je veux agrandir à chaque pression sur SIP.

Le SIP est appelé correctement chaque fois que le TextBox reçoit le focus, mais je n'arrive pas à obtenir le TextBox suffisamment pour afficher le texte. Le TextBox est ancré à la base.

J'ai placé des points d'arrêt dans mon code, et la routine SIP_EnabledChanged est frappé et txtNote.Size est changé ... mais la taille de mon TextBox ne change pas sur l'écran.

Pourquoi?

using Microsoft.WindowsCE.Forms; 

int startH = txtNote.Size.Height; 
// (In the designer): 
this.inputPanel1.EnabledChanged += new System.EventHandler(this.SIP_EnabledChanged); 

void Form1_Load(object sender, EventArgs e) { 
    inputPanel1.Enabled = false; 
    startH = txtNote.Size.Height; 
} 

void SIP_EnabledChanged(object sender, EventArgs e) { 
    SuspendLayout(); 
    int height = inputPanel1.Enabled ? startH + 80 : startH; 
    txtNote.Size = new Size(txtNote.Size.Width, height); 
    ResumeLayout(); 
} 

TextBox displayedSIP displayed

Répondre

0

J'ai obtenu une réponse sur MSDN >> HERE << hier que j'étais capable de modifier pour fonctionner.

La clé, apparemment, est de définir le Bounds, pas le Size ou le Location.

Voici ce que je suis allé avec:

int startY; 

void Form1() : Form { 
    InitializeComponent(); 
    startY = txtNote.Location.Y; // only set here. 
} 
// Method below fires whenever the Soft Input Panel changes 
void SIP_EnabledChanged(object sender, EventArgs e) { 
    int locationY = startY; 
    if (inputPanel1.Enabled) { 
    locationY -= inputPanel1.Bounds.Height; 
    } 
    txtNote.SuspendLayout(); 
    // setting the Bounds was the key to getting this to work! 
    txtNote.Bounds = new Rectangle(
    txtNote.Location.X, 
    locationY, 
    txtNote.Size.Width, 
    txtNote.Size.Height 
); 
    txtNote.ResumeLayout(); 
    txtNote.Refresh(); 
} 

J'espère que l'affichage de la solution aide quelqu'un, un jour.

1

Si elle est amarrée, et non ancré est la première chose qui pourrait être hors ici. Je suis sceptique que vous voulez vraiment changer la taille de la zone de texte. Habituellement, je gère les changements dans le panneau de saisie, mais en déplaçant la totalité du formulaire (direction -) par la hauteur de la hauteur du SIP, plutôt que de redimensionner mes contrôles. Ce formulaire semble un peu différent, et peut-être vous avez un contrôle d'entrée unique? Si c'est le cas, je serais sûr que c'est le premier contrôle dans l'ordre z et juste positionnez-le au-dessus du SIP quand il est affiché.

Questions connexes