2008-11-19 7 views
4

Je cherche à avoir une boîte de dialogue personnalisée simple, comme une boîte de message, qui a une étiquette et un TextBox. S'il y a un moyen simple de le faire, désolé! Je ne suis pas très versé dans les dialogues.boîte de dialogue personnalisée avec un champ de texte dans winmobile

Merci pour toute aide, les gars!

+0

Quelle expérience avez-vous du développement Visual Studio, C# et winforms? – MusiGenesis

+0

Cela permettrait de déterminer à quel point une réponse à cette question devrait être détaillée. :) – MusiGenesis

+0

Je suis très expérimenté avec le C++, donc je peux généralement obtenir le jist général ... J'ai une quantité décente de travail en C#. Poser sur moi! – Matthew

Répondre

11

Voici comment faire une petite boîte de dialogue personnalisée dans Windows Mobile qui ressemble à ceci:

alt text http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

Ajouter un formulaire à votre projet, et définissez sa propriété FormBorderStyle Aucun. Cela permet de redimensionner et de positionner le formulaire, mais cela signifie également qu'il n'a ni bordure ni barre de titre, et que l'utilisateur n'a aucun moyen de le déplacer.

Donc, vous devez faire semblant tous les trois. La façon la plus simple de truquer la bordure et la barre de titre est de créer le BackColor de votre formulaire SystemColors.WindowFrame, puis de mettre une étiquette (avec "Dialog" dans l'image) avec BackColor = SystemColors.Highlight et ForeColor = SystemColor.HighlightText (et gras la police), puis mettre un panneau avec BackColor = SystemColors.Window où vous voyez blanc dans l'image. Vous devez modifier les positions et les tailles de l'étiquette et du panneau de sorte que vous ayez une bordure de 1 pixel (ce qui est juste le BackColor de votre formulaire).

Pour activer la forme d'être traîné autour par sa barre de titre faux, ajoutez ce code à la forme (et bien sûr vous devez câbler les événements, aussi):

private bool _Moving = false; 
private Point _Offset; 
private void Form1_MouseDown(object sender, MouseEventArgs e) 
{ 
    _Moving = true; 
    _Offset = new Point(e.X, e.Y); 
} 

private void Form1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (_Moving) 
    { 
     Point newlocation = this.Location; 
     newlocation.X += e.X - _Offset.X; 
     newlocation.Y += e.Y - _Offset.Y; 
     this.Location = newlocation; 
    } 
} 
private void Form1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (_Moving) 
    { 
     _Moving = false; 
    } 
} 

Un autre problème est que Parce qu'il n'y a pas de véritable barre de titre, l'utilisateur n'a aucun moyen de fermer le formulaire.Vous devez ajouter un OK (ou Fermer) bouton et mettre cela en l'événement Click du bouton:

this.DialogResult = DialogResult.OK; 

Normalement, vous devriez utiliser l'événement de la souris sur la barre de titre pour faciliter le déplacement, mais le contrôle de l'étiquette qui ne fonctionne pas avoir des événements de souris. Avec ce code, vous pouvez réellement saisir n'importe où sur le formulaire et le faire glisser, sauf que le panneau le bloque et fait de la barre de titre le seul endroit à saisir et à faire glisser.

Mon autre réponse contient plus de détails sur la récupération d'informations à partir des boîtes de dialogue personnalisées.

Mise à jour: en fait, il n'y a que évident façon de fermer un formulaire sans bordure sans ajouter votre propre bouton OK. Tant que vous ne définissez pas la propriété ControlBox de votre formulaire sur False, le bouton OK ou X dans le coin supérieur droit de l'écran Aujourd'hui fermera votre boîte de dialogue, même si ce n'est pas le cas, car ce n'est pas le cas. forme.

0

Je suppose que vous voulez essentiellement une boîte de dialogue personnalisée qui retourne une chaîne entrée par l'utilisateur. Une façon consiste à ajouter une référence à Microsoft.VisualBasic à votre projet, ce qui vous donne accès à la méthode InputBox, qui est essentiellement une boîte de message avec une zone de texte dessus. Mais ce n'est pas amusant et je ne suis pas sûr que ça marcherait sur un smartphone de toute façon.

Pour créer le vôtre, il suffit d'ajouter un formulaire (nommé CustomDialog) à votre projet et de faire glisser une zone de texte (textBox1), une étiquette (label1) et un bouton (étiqueté "OK").

Pour définir le texte de l'étiquette, ajouter un paramètre au constructeur du formulaire comme celui-ci:

public CustomDialog(string textCaption) 
{ 
    label1.Text = textCaption; 
} 

Pour exposer le texte saisi à l'appelant, ajoutez ce code à la forme:

public override string Text 
{ 
    get 
    { 
     return textBox1.Text; 
    } 
} 

Dans l'événement click du bouton OK, entrez ce code:

this.DialogResult = DialogResult.OK; // this will close the form, too 

Pour utiliser cette boîte de dialogue depuis votre formulaire principal, vous devez mangé une instance de cette forme, le montrer, vérifiez que le bouton OK a été cliqué, puis lire sa propriété Text (qui renvoie ce que l'utilisateur est entré) comme ceci:

using (CustomDialog dialog = new CustomDialog("What is your name")) 
{ 
    if (dialog.ShowDialog(this) == DialogResult.OK) 
    { 
     string enteredText = dialog.Text; 
    } 
} 

Vous pouvez obtenir colombophile, mais ce sont les bases.

1

Si vous voulez un super simple mais [t] solution laide, vous pouvez inclure une référence dans votre projet Microsoft.VisualBasic, qui vous permet d'utiliser la fonction VB InputBox comme ceci:

string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text", 
    "title text", "default value", 0, 0); 

Le La boîte de dialogue occupe tout l'écran, mais elle est simple à utiliser. Mais est incroyablement laid, comme je l'ai mentionné.

Questions connexes