在您的问题中,您写的是“WPF”,但您的屏幕截图显然是 Windows 窗体应用程序,因此我将为 Windows 窗体提供答案。但是,可以轻松修改它以使用 WPF。
虽然您可以单独验证每个文本框,但问题的有趣部分是如何跨多个控件完成验证。在进行验证时,您必须决定当输入既无效又有效时应用程序的行为方式。一个简单而好的方法是根据输入的有效性更新视觉状态。例如,只有在整个输入有效时才能单击按钮。这避免了输入无效的情况,用户单击按钮然后得到一个必须关闭的错误。为了进一步完善这一点,您可以在 UI 中提供有关为什么某些内容无效的提示。
根据您的屏幕截图,我的猜测是您想在大文本框中提供有关验证结果的一些信息。您可以创建方法来根据其他文本框的内容更新此文本框的内容。除了更新大文本框外,此方法还可以启用和禁用按钮等,以实现更真实的场景。
private void UpdateVisualState()
{
var ipString = $"{textBox1.Text}.{textBox2.Text}.{textBox3.Text}.{textBox4.Text}";
infoTextBox.Text = IPAddress.TryParse(ipString, out var address)
? address.ToString()
: "(Invalid IP address)";
}
此方法会将textBox1 中的文本转换为textBox4,从中创建一个IP 地址,解析此IP 地址并使用解析的IP 地址或指示该IP 地址的文本更新infoTextBox无效。
现在你要做的就是在每个 IP 地址八位字节文本框中的文本发生变化时调用这个方法:
private void textBox1_TextChanged(object sender, EventArgs e)
{
UpdateVisualState();
}
对其余三个带有 IP 地址八位字节的文本框执行相同操作。
这是一种验证表单整个状态的非常简单的方法,随着您的用户界面和验证规则变得越来越复杂,您可能会发现它的扩展性不太好。但是,如果可以的话,就开始吧。
要了解更高级的验证方法,您可以阅读User Input Validation in Windows Forms。