(C#winformのフォームの代わりに)フォームユーザーコントロールを使用しました。
このユーザーコントロールには、1つのコンボボックスと1つのテキストボックスがあります。
コンボボックスを変更すると、選択した値(1または2または3)について、テキストボックスのテキストはそれぞれ1または2または3で始まります。
ユーザーはテキストボックスに6桁の数字を追加できますが、1、2、または3を削除または変更することはできません。
私はどのように行いますか?
(C#winformのフォームの代わりに)フォームユーザーコントロールを使用しました。
このユーザーコントロールには、1つのコンボボックスと1つのテキストボックスがあります。
コンボボックスを変更すると、選択した値(1または2または3)について、テキストボックスのテキストはそれぞれ1または2または3で始まります。
ユーザーはテキストボックスに6桁の数字を追加できますが、1、2、または3を削除または変更することはできません。
私はどのように行いますか?
これが機能するかどうかを確認してください。TextChanged イベントを処理して、最初の文字が ComboBox の選択からの値であることを確認しています。
public partial class UserControl1 : UserControl
{
string mask;
public UserControl1()
{
InitializeComponent();
textBox1.MaxLength = 7;
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
}
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsNumber(e.KeyChar) && !( e.KeyChar == 0x8) && !(e.KeyChar == 0xd))
e.Handled = true;
}
void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
char[] temp = tb.Text.ToCharArray(); //Code to catch any cut and Paste non numeric characters
foreach (var item in temp)
{
if (!(char.IsNumber(item)))
{
tb.Text = "";
break;
}
}
if (tb.TextLength == 0)
{
tb.Text = mask[0].ToString();
tb.SelectionStart = tb.Text.Length;
}
else
{
if (tb.Text[0] != mask[0])
{
tb.Text = mask[0] + tb.Text;
tb.SelectionStart = tb.Text.Length;
}
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
mask = ((ComboBox)sender).SelectedValue.ToString();
textBox1.Text = mask;
}
}
コンボボックスの selectedchanged イベントで、テキスト ボックスの値を 1/2/3 に設定します。ユーザーがテキストボックスの最初の文字を削除/編集できない場合に対処するために、テキストボックスのキー押下またはキーダウンイベントを設定します。ユーザーが最初の文字を削除/編集しようとしている場合は、条件を設定して e.Handled = true に設定します。最初の文字を編集できないことをユーザーに警告するようにしてください。
cmbBox_SelectionChanged(object sender, SomeEventArgs args)
{
txtBox.Text = "1";
}
txtBox_KeyPress(object sender, KeyPressEventArgs e)
{
//Writing a little bit of pseudo code here 'cause I don't have VS on this system.
if(KeyPressed is delete or if the txtBox.Text string is left with a single character)
e.Handled = true;
}
ユーザーがテキスト全体を選択して削除する場合など、他のいくつかのケースも同様に処理できます。コンボボックスでも考えられるケースを見逃していないかどうかを確認してください。ユーザーが新しい値を選択したときに、テキスト ボックス内の既存の文字列の最初の文字を置き換えたいと思うかもしれません。そのようなもの。
テキストボックスに数字が本当に必要な場合は、おそらく KeyPress イベントを処理する必要があり、ユーザーが開始したい数字を削除したり、開始数字の前に数字を追加したりしていないことを確認してください。KeyPress イベントを処理すると、長さをフィルター処理して、ユーザーが数字のみを入力するように制限することもできます。
これを処理する別の方法は、Label コントロールを TextBox のすぐ左側に配置することです。数字を Label に入れ、ユーザーが TextBox のテキストを編集できるようにします。UserControl の値を操作して、2 つを連結します。ComboBox で「2」が選択されている場合、Label のテキストは「2」になり、ユーザーは「543」と入力し、ユーザー コントロールの Value プロパティを「2543」に設定します。
イベントのすべてのケースを気にしないでください。テキストボックスの前にラベルを配置し、コンボボックスの値を設定するだけです。清潔でメンテナンスが簡単。