ラベルと TextBox を持つ、メッセージ ボックスのようなシンプルなカスタム ダイアログ ボックスを探しています。これを行う簡単な方法があれば、ごめんなさい!私は本当にダイアログのことに精通していません。
助けてくれてありがとう、みんな!
ラベルと TextBox を持つ、メッセージ ボックスのようなシンプルなカスタム ダイアログ ボックスを探しています。これを行う簡単な方法があれば、ごめんなさい!私は本当にダイアログのことに精通していません。
助けてくれてありがとう、みんな!
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] ボタンを押すと、ダイアログが閉じます。形。
非常にシンプルだが醜いソリューションが必要な場合は、プロジェクトにMicrosoft.VisualBasicへの参照を含めることができます。これにより、次のようにVB関数InputBoxを使用できます。
string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
"title text", "default value", 0, 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;
}
}
より凝ったものにすることもできますが、それが基本です。