Frage

Ich suche ein einfaches benutzerdefiniertes Dialogfeld zu haben, wie ein Meldungsfeld, das eine Beschriftung und ein Textfeld hat. Wenn es eine einfache Möglichkeit, dies zu tun, sorry! Ich bin wirklich nicht gut im Dialog Sachen versiert.

Danke für jede Hilfe, Jungs!

War es hilfreich?

Lösung

Hier ist, wie ein kleines benutzerdefiniertes Dialogfeld in Windows Mobile zu machen, die wie folgt aussieht:

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

ein Formular zu Ihrem Projekt hinzufügen, und legen Sie seine Eigenschaft Formborderstyle auf None. Dies ermöglicht die Form der Größe verändert und positioniert werden, aber auch bedeutet, dass es keine Grenze oder titlebar hat, und es gibt keine Möglichkeit für den Benutzer, um es zu bewegen.

So Sie zu fälschen haben alle drei. Der einfachste Weg zu fälschen die Grenze und die Titelleiste ist die Backcolor des Formulars SystemColors.WindowFrame zu machen, setzten Sie dann ein Etikett (wo es heißt „Dialog“ im Bild) mit Backcolor = SystemColors.Highlight und ForeColor = SystemColor.HighlightText (und fett die Schriftart), legte dann einen Panel mit Backcolor = SystemColors.Window, wo man auf dem Bild sieht, weiß. Sie haben die Positionen und Größen des Etiketts und die Platte zu optimieren, so dass Sie eine 1-Pixel-Grenze haben (die nur die Backcolor des Formulars ist durch darstellt).

, um die Form zu ermöglichen, indem seine gefälschte titlebar, fügen Sie diesen Code in das Formular (und natürlich haben Sie die Ereignisse verkabeln, auch) zu gezogen werden um:

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

Ein weiteres Problem ist, dass, weil es keine wirkliche titlebar ist, gibt es keine Möglichkeit für den Benutzer das Formular zu schließen. Sie haben eine OK (oder Schließen), um hinzuzufügen, und setzen diese in dem Click-Ereignis der Schaltfläche:

this.DialogResult = DialogResult.OK;

Normalerweise werden Sie das Maus-Ereignis auf der Titelleiste ziehen zu erleichtern, aber das Label-Steuerelement hat keine Mausereignisse. Mit diesem Code können Sie eigentlich überall auf dem Formular packen und ziehen Sie es, mit Ausnahme der Feldblöcke dieses und machen den Titel den einzigen Ort bar greifen und ziehen.

Meine andere Antwort hat weitere Details zu den Informationen zurück von benutzerdefinierten Dialogen zu bekommen.

Update: Eigentlich gibt es nur keine klar Art und Weise eine randlose Form zu schließen, ohne Ihre eigene OK-Taste hinzufügen. Solange Sie nicht die OK oder X-Taste wird Ihren Dialog in der oberen rechten Ecke des Heute-Bildschirms eingestellt haben, auf False Eigenschaft ControlBox des Formulars, in der Nähe, auch wenn es nicht so wird es nicht aussehen, da es nicht wirklich auf das ist Form.

Andere Tipps

Wenn Sie eine super-einfache, aber [t] hässliche Lösung, können Sie einen Verweis in Ihrem Projekt Microsoft.VisualBasic enthalten, mit dem Sie die VB-Funktion InputBox wie folgt verwenden können:

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

Der Dialog nimmt den gesamten Bildschirm, sondern ist einfach zu bedienen. Aber ist unglaublich hässlich, wie ich bereits erwähnt.

Ich nehme an, Sie im Grunde ein benutzerdefiniertes Dialogfeld wollen, die eine Zeichenfolge vom Benutzer eingegebenen zurückzugibt. Eine Möglichkeit ist, einen Verweis auf Microsoft.VisualBasic zu einem Projekt hinzuzufügen, die Sie Methode Zugriff auf die InputBox gibt, das ist im Grunde ein Meldungsfeld mit einem Textfeld auf es. Aber das ist kein Spaß, und ich bin nicht sicher, es wäre sowieso auf einem Smartphone arbeiten.

Ihre eigene Rolle, Sie fügen Sie einfach ein Formular (genannt CustomDialog) zu Ihrem Projekt und ziehen Sie eine Textbox (textBox1), ein Etikett (label1) und eine Taste auf sie ( „OK“ gekennzeichnet).

den Beschriftungstext zu setzen, fügen Sie einen Parameter an den Konstruktor der Form wie folgt aus:

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

Um den eingegebenen Text an den Anrufer aussetzen, fügen Sie diesen Code in das Formular:

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

im Click-Ereignis der Schaltfläche OK, setzen Sie diesen Code ein:

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

Um diesen Dialog von Ihrem Hauptformular zu verwenden, können Sie eine Instanz dieses Formular erstellen, zeigen Sie sie, um zu sehen, dass die OK-Schaltfläche geklickt wurde, und dann seine Eigenschaft Text lesen (das gibt, was der Benutzer eingegeben) wie folgt:

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

Sie können schicker, aber das sind die Grundlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top