4

ラベルと TextBox を持つ、メッセージ ボックスのようなシンプルなカスタム ダイアログ ボックスを探しています。これを行う簡単な方法があれば、ごめんなさい!私は本当にダイアログのことに精通していません。

助けてくれてありがとう、みんな!

4

3 に答える 3

11

Windows Mobile で次のような小さなカスタム ダイアログ ボックスを作成する方法を次に示します。

代替テキスト http://www.freeimagehosting.net/uploads/b8fb5421d6.jpg

プロジェクトにフォームを追加し、その FormBorderStyle プロパティを None に設定します。これにより、フォームのサイズ変更と配置が可能になりますが、境界線やタイトルバーがなく、ユーザーがフォームを移動する方法がないことも意味します。

したがって、3つすべてを偽造する必要があります。境界線とタイトル バーを偽装する最も簡単な方法は、フォーム SystemColors.WindowFrame の BackColor を作成し、BackColor = SystemColors.Highlight および ForeColor = SystemColor.HighlightText を使用してラベル (画像の「ダイアログ」と表示されている場所) を配置することです。 (そしてフォントを太字にします)、次に BackColor = SystemColors.Window のパネルを画像の白が見える場所に配置します。ラベルとパネルの位置とサイズを微調整して、境界線が 1 ピクセルになるようにする必要があります (これは、フォームの BackColor が透けて見えるだけです)。

偽のタイトルバーでフォームをドラッグできるようにするには、次のコードをフォームに追加します (もちろん、イベントも接続する必要があります)。

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

もう 1 つの問題は、実際のタイトルバーがないため、ユーザーがフォームを閉じる方法がないことです。OK (または閉じる) ボタンを追加し、これをボタンの Click イベントに配置する必要があります。

this.DialogResult = DialogResult.OK;

通常、ドラッグを容易にするためにタイトル バーでマウス イベントを使用しますが、ラベル コントロールにはマウス イベントがありません。このコードを使用すると、フォーム上の任意の場所を実際につかんでドラッグできますが、パネルがこれをブロックし、タイトル バーだけをつかんでドラッグする場所にします。

私の他の回答には、カスタム ダイアログから情報を取得する方法の詳細があります。

更新: 実際には、独自の [OK] ボタンを追加せずにボーダレス フォームを閉じる明確な方法はありません。フォームの ControlBox プロパティを False に設定しない限り、Today 画面の右上隅にある [OK] または [X] ボタンを押すと、ダイアログが閉じます。形。

于 2008-11-20T15:45:54.637 に答える
1

非常にシンプルだが醜いソリューションが必要な場合は、プロジェクトにMicrosoft.VisualBasicへの参照を含めることができます。これにより、次のようにVB関数InputBoxを使用できます。

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

ダイアログは画面全体を占めますが、使い方は簡単です。しかし、私が言ったように、信じられないほど醜いです。

于 2008-11-20T17:29:34.507 に答える
0

基本的に、ユーザーが入力した文字列を返すカスタム ダイアログ ボックスが必要だと思います。1 つの方法は、Microsoft.VisualBasic への参照をプロジェクトに追加することです。これにより、InputBox メソッドにアクセスできるようになります。このメソッドは、基本的にはテキスト ボックスのあるメッセージ ボックスです。しかし、それは面白くないし、とにかくスマートフォンで動作するかどうかはわかりません.

独自のフォームを作成するには、フォーム (CustomDialog という名前) をプロジェクトに追加し、テキスト ボックス (textBox1)、ラベル (label1)、およびボタン ("OK" というラベル) をドラッグします。

ラベル テキストを設定するには、次のようにフォームのコンストラクターにパラメーターを追加します。

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

入力したテキストを発信者に公開するには、次のコードをフォームに追加します。

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

OK ボタンのクリック イベントに、次のコードを挿入します。

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

メイン フォームからこのダイアログを使用するには、このフォームのインスタンスを作成して表示し、[OK] ボタンがクリックされたことを確認してから、その Text プロパティ (ユーザーが入力した内容を返します) を次のように読み取ります。

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

より凝ったものにすることもできますが、それが基本です。

于 2008-11-19T18:11:47.277 に答える