Question

Je souhaite créer une boîte de dialogue personnalisée simple, semblable à une boîte de message, qui comporte une étiquette et une zone de texte. S'il y a un moyen simple de faire cela, désolé! Je ne suis vraiment pas très versé dans le dialogue.

Merci pour votre aide, les gars!

Était-ce utile?

La solution

Voici comment créer une petite boîte de dialogue personnalisée dans Windows Mobile qui se présente comme suit:

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

Ajoutez un formulaire à votre projet et définissez sa propriété FormBorderStyle sur Aucun. Cela permet au formulaire d'être redimensionné et positionné, mais signifie également qu'il n'a pas de bordure ni de barre de titre et que l'utilisateur ne peut pas le déplacer.

Vous devez donc simuler les trois. Le moyen le plus simple de simuler la bordure et la barre de titre consiste à créer le BackColor de votre formulaire SystemColors.WindowFrame, puis à placer une étiquette (où il est indiqué "Dialog" dans l'image) avec BackColor = SystemColors.Highlight et ForeColor = SystemColor. HighlightText (et la police en gras), puis placez un panneau avec BackColor = SystemColors.Window où vous voyez du blanc dans l'image. Vous devez modifier les positions et les tailles de l'étiquette et du panneau pour obtenir une bordure de 1 pixel (qui correspond uniquement à la couleur de fond de votre formulaire).

Pour permettre au formulaire d'être déplacé par sa fausse barre de titre, ajoutez ce code au formulaire (et bien sûr, vous devez également connecter les événements):

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 qu’étant donné qu’il n’existe pas de barre de titre, il est impossible pour l’utilisateur de fermer le formulaire. Vous devez ajouter un bouton OK (ou Fermer) et le placer dans l'événement Click du bouton:

this.DialogResult = DialogResult.OK;

Normalement, vous utiliseriez l’événement de la souris sur la barre de titre pour faciliter le glissement, mais le contrôle d’étiquette ne contient aucun événement de la souris. Avec ce code, vous pouvez en fait 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 où il est possible de saisir et de faire glisser.

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

Mise à jour: en fait, il n’existe aucun moyen évident 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 elle ne semble pas l'être, car elle n'est pas réellement affichée. forme.

Autres conseils

Si vous souhaitez une solution très simple mais [m] laid, vous pouvez inclure une référence à votre projet dans Microsoft.VisualBasic, qui vous permet d’utiliser la fonction VB InputBox comme suit:

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

La boîte de dialogue occupe tout l’écran, mais elle est simple à utiliser. Mais c’est incroyablement moche, comme je l’ai dit.

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

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

Pour définir le texte de l'étiquette, ajoutez un paramètre au constructeur du formulaire, comme suit:

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

Pour exposer le texte saisi à l'appelant, ajoutez ce code au formulaire:

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

Dans l'événement de clic du bouton OK, insérez ce code:

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

Pour utiliser cette boîte de dialogue à partir de votre formulaire principal, créez une instance de ce formulaire, affichez-la, vérifiez que le bouton OK a été cliqué, puis lisez sa propriété Text (qui renvoie ce que l'utilisateur a saisi), comme suit:

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

Vous pouvez devenir plus chic, mais ce sont les bases.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top