数据在从 Form2 发送回 Form1 之前验证
Posted
技术标签:
【中文标题】数据在从 Form2 发送回 Form1 之前验证【英文标题】:Data validate before send back from Form2 to Form1 【发布时间】:2022-01-14 23:38:47 【问题描述】:我有 2 个表格,Form1 和 Form2。
假设在 Form1 中,它在 ListBox 中显示一个水果名称列表和一个 ADD 按钮。在Form2中,一个TextBox输入水果名称和OK按钮。
当点击添加按钮时,我能够从 Form1 调用 Form2,并在点击 OK 按钮时将数据从 Form2 传递到 Form1。 (确定按钮 > DialogResult 属性设置为“确定”)
但有一个问题...当 Form2 中的 TextBox 为空并单击“确定”按钮时,它会显示消息框,然后关闭 Form2 并在 Form1 中继续。
虽然点击了确定按钮,但如果 TextBox 为空,如何让 Form2 保持打开状态?
下面是示例代码:
public partial class Form1 : Form
private void btnAdd_Click(object sender, EventArgs e)
using (Form2 f2 = new Form2())
if (f2.ShowDialog() == DialogResult.OK)
string newFruit = f2.fruit;
//add newFruit value into Form1 ListBox
public partial class Form2 : Form
public string fruit get;
private void btnOK_Click(object sender, EventArgs e)
if (txtFruitName.Text != "")
fruit = txtFruitName.Text;
else
MessageBox.Show("Fruit name cannot be empty!");
【问题讨论】:
btnOk
的Form2
上的DialogResult
属性是否设置为None
以外的任何值?
我只将Form2的btnOK的DialogResult设置为“OK”
必须有其他东西关闭form2。在我的小测试中……您的要求……“当 Form2 中的 TextBox 为空并单击 OK 按钮时,它会显示消息框然后关闭 Form2”……在我的测试中不会发生。无论文本框是否有文本,Form2 都将保持打开状态。正如在前面的评论中已经指出的那样……发布的代码似乎没有将表单 DialogResult 设置为 OK,也没有关闭 form2。最后,不清楚fruit = txtFruitName.Text;
行代码如何不产生编译时错误……? …它似乎是一个只读变量,除非我遗漏了什么。
【参考方案1】:
如果您将表单中按钮的DialogResult
设置为None
以外的其他值,则该按钮将关闭表单并自动更新其DialogResult
。要控制关闭行为,您必须自己实现逻辑 - 在这种情况下这真的没什么大不了的。只需将以下行添加到您的Form2
按钮代码中,并将属性中按钮的DialogResult
切换为None
。
private void button1_Click(object sender, EventArgs e)
if (txtFruitName.Text != "")
fruit = txtFruitName.Text;
DialogResult = DialogResult.OK;
Close();
else
MessageBox.Show("Fruit name cannot be empty!");
【讨论】:
【参考方案2】:我会订阅FormClosing
事件,这是进行验证的常规做法。
public partial class Form2 : Form
public string fruit get;
Form2()
InitializeComponent();
FormClosing += form2_FormClosing;
private void btnOK_Click(object sender, EventArgs e)
if (txtFruitName.Text != "")
fruit = txtFruitName.Text;
Close();
else
MessageBox.Show("Fruit name cannot be empty!");
private void form2_FormClosing(object sender, FormClosingEventArgs e)
if (string.IsNullOrWhiteSpace(txtFruitName?.Text))
e.Cancel = true;
【讨论】:
以上是关于数据在从 Form2 发送回 Form1 之前验证的主要内容,如果未能解决你的问题,请参考以下文章