5 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
您可以為離開(kāi)事件定義一個(gè)方法,并將該方法設(shè)置為屬性窗口中每個(gè)文本框的離開(kāi)事件:
private void TextBoxGroup_Leave(object sender, TextBox e)
{
if (Convert.ToInt32(e.Text) < 1 || Convert.ToInt32(e.Text) > 100)
{
MessageBox.Show("Please enter a number from 1 - 100");
e.Text = string.Empty;
}
}

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
下面是使用文本框的離開(kāi)事件的示例。此外,文本框按鍵事件用于僅允許數(shù)字。將每個(gè)文本框Leave和KeyPress事件連接到下面的文本框和事件,它應(yīng)該按照您所描述的方式工作。正如其他人提到的,有很多方法可以做到這一點(diǎn)。
private void tb_Course_Leave(object sender, EventArgs e) {
TextBox tb = sender as TextBox;
if (tb.Text == "")
return;
if (int.TryParse(tb.Text, out int value)) {
if (value >= 0 && value <= 100) {
return;
}
}
MessageBox.Show("Please enter a VALID number from 1 - 100");
tb.Text = "";
}
private void tb_Course_KeyPress(object sender, KeyPressEventArgs e) {
e.Handled = !char.IsDigit(e.KeyChar);
}

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
您可以循環(huán)遍歷 GroupBox 中的每個(gè)控件,并檢查哪些是文本框:
ForEach (Control tb in gb.Controls) //gb is a reference your GroupBox object
{
if tb is TextBox
{
int i;
if (int.TryParse(tb.Text, out i))
{
if (i >= 0 && i <= 100)
return;
}
}
MessageBox.Show("Please enter a number from 1 - 100");
}
在缺乏關(guān)于您正在做什么的更多背景的情況下,很難優(yōu)化您的驗(yàn)證過(guò)程,但這回答了您的問(wèn)題。

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
如果您想驗(yàn)證多個(gè)組框中文本框的輸入,您可以嘗試此操作。
private void ValidateInputOfControls(Control.ControlCollection[] controlsArray)
{
foreach (Control.ControlCollection controlCollection in controlsArray)
{
foreach (Control control in controlCollection)
{
if (control is TextBox)
{
int result;
if (int.TryParse(control.Text, out result))
{
if (!(result >= 0 && result <= 100))
{
MessageBox.Show("Please enter a number from 1 - 100 in field " + control.Name);
}
}
else
{
MessageBox.Show("Please enter a number from 1 - 100 in field " + control.Name);
}
}
}
}
}
您需要做的就是將組框的控件添加到 Control.ControlCollection 數(shù)組中,然后調(diào)用該方法。請(qǐng)參閱下面的示例。
Control.ControlCollection[] controls = { groupBox1.Controls, groupBox2.Controls };
ValidateInputOfControls(controls);

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
對(duì)于復(fù)雜的形式MessageBox.Show
可能會(huì)變得相當(dāng)煩人:
它不會(huì)將用戶指向錯(cuò)誤的字段
它一一顯示錯(cuò)誤,您可能還有更多不正確的輸入
還建議的方法“允許”用戶通過(guò)單擊“添加”按鈕來(lái)失敗。
我建議使用ErrorProvider將用戶指向失敗的輸入,并在模型(在您的情況下 - 所有輸入)無(wú)效時(shí)禁用按鈕。您甚至可以限制用戶在提供錯(cuò)誤輸入時(shí)不要留下字段:)
您可以閱讀Windows 窗體中的用戶輸入驗(yàn)證指南,它概述了 WindowsForms 中的驗(yàn)證工具。
public partial class Form1 : Form
? ? {
? ? ? ? private HashSet<TextBox> validatedInputs = new HashSet<TextBox>();
? ? ? ? private int inputsCount;
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? ? ? button1.Enabled = false;
? ? ? ? ? ? foreach (var tb in groupBox1.Controls.OfType<TextBox>())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? tb.Validating += allTextBoxs_ValidatingAndEditing;
? ? ? ? ? ? ? ? tb.TextChanged += allTextBoxs_ValidatingAndEditing;
? ? ? ? ? ? ? ? inputsCount++;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? private void allTextBoxs_ValidatingAndEditing(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? if (sender is TextBox tb)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if (!int.TryParse(tb.Text, out int value) || value < 0 || value > 100)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (e is CancelEventArgs ce)
? ? ? ? ? ? ? ? ? ? ? ? ce.Cancel = true;
? ? ? ? ? ? ? ? ? ? errorProvider1.SetError(tb, "Value must be in range [0..100]");
? ? ? ? ? ? ? ? ? ? validatedInputs.Remove(tb);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? errorProvider1.SetError(tb, null);
? ? ? ? ? ? ? ? ? ? validatedInputs.Add(tb);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? setAddButtonEnabled();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? private void setAddButtonEnabled() => button1.Enabled = validatedInputs.Count == inputsCount;
? ? }
請(qǐng)注意,此實(shí)現(xiàn)的限制非常嚴(yán)格,用戶甚至無(wú)法關(guān)閉表單,直到輸入正確的值:)
- 5 回答
- 0 關(guān)注
- 230 瀏覽
添加回答
舉報(bào)