C# 是否为全局对象?
我有WinForms应用程序和多个表单,希望在每个表单上使用C# 是否为全局对象?,c#,.net,winforms,C#,.net,Winforms,我有WinForms应用程序和多个表单,希望在每个表单上使用ErrorProvider组件编辑:来检查用户输入是否正常(例如,如果输入的数字在范围内等等)。在我看来,将此组件放到每个表单上似乎没有用。如果我创建一个全局对象(或如何调用它)并在每个窗体上使用它会怎么样 我的想法是: namespace MyApplication { static class Program { public static ErrorProvider EP = new ErrorProvider(); .
ErrorProvider
组件编辑:来检查用户输入是否正常(例如,如果输入的数字在范围内等等)。在我看来,将此组件放到每个表单上似乎没有用。如果我创建一个全局对象(或如何调用它)并在每个窗体上使用它会怎么样
我的想法是:
namespace MyApplication {
static class Program {
public static ErrorProvider EP = new ErrorProvider();
...
然后以单独的形式处理验证
和验证
事件:
private void txtBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
if (txtBox1.Text != "correct text") {
e.Cancel = true;
Program.EP.SetError(txtBox1, "You have error in your input");
...
这是正确的方法还是我应该以其他方式去做
如果我需要更多的全局对象,也许我应该把它们放在一个单独的静态类中,然后在程序中创建一个(?)
谢谢。只要您的单个表单从未同时运行,或者您的错误提供程序是可重入的,并且您的错误提供程序不需要返回到表单的永久链接,此方法就有效。从您展示的示例来看,您的提供程序似乎要求您传递用于设置错误状态的控件,因此它有很好的重新进入的机会。我认为您可以创建一个继承textbox类的新类并在其中添加验证,然后创建一个新控件作为您的类,并在需要时使用它,在这种情况下,稍后您将在一个位置编辑/修改验证
如果您有非常不同的验证,请创建两个类,例如:NumericTextBox和StringTextBox,可以使用全局对象,但如果可能的话,我宁愿将其设置为静态无状态类。无状态将允许轻松的线程安全性。在.NET中,具有全局(命名空间内)静态类是很常见的,例如FileInfo
或Convert
如果您只需要一些全局方法,并且它们在UI元素上运行,那么您还可以为System.Windows.Controls.Control
甚至System.Windows.Controls.TextBox
编写一些扩展方法,如果这是您想要的唯一控件。这将为您提供更好的代码:
txtBox1.Validate("correct text", "You have error in your input");
扩展方法可以如下所示:
public static class MyExtension
{
public static void Validate(this TextBox myTextBox, string correctText, string error)
{
if(myTextBox.Text != correctText)
Console.WriteLine(string.Format("{0} [{1} == '{2}']", error, myTextBox.Name, myTextBox.Text));
}
}
这将在控制台中为您提供以下消息:
您的输入有错误[txtBox1=='some text']
如果您需要更多信息,请查看扩展方法。您将如何使用ErrorProvider
?它会保持状态吗?@Enriqe,你可以随时更改你选择的作为你问题最佳答案的内容:-):D是的,你是对的。我喜欢写一些基本组件的扩展,我知道你也写了,但是@Ali Issa是第一个,无论如何,谢谢你让我心情愉快:)祝你有愉快的一天。。。。对不起;)