winmobileのテキストフィールドを持つカスタムダイアログ
-
08-07-2019 - |
質問
メッセージボックスのような、ラベルと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]ボタンは、実際には表示されていないように見えてもダイアログを閉じます。フォーム。
他のヒント
非常にシンプルだがbutいソリューションが必要な場合は、プロジェクトにMicrosoft.VisualBasicへの参照を含めることができます。これにより、VB関数InputBoxを次のように使用できます。
string s = Microsoft.VisualBasic.Interaction.InputBox("prompt text",
"title text", "default value", 0, 0);
ダイアログは画面全体を占めますが、使いやすいです。しかし、私が言ったように、非常にiblyいです。
基本的に、ユーザーが入力した文字列を返すカスタムダイアログボックスが必要だと想定しています。 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;
}
}
より洗練されたものを得ることができますが、それが基本です。