Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否为全局对象?_C#_.net_Winforms - Fatal编程技术网

C# 是否为全局对象?

C# 是否为全局对象?,c#,.net,winforms,C#,.net,Winforms,我有WinForms应用程序和多个表单,希望在每个表单上使用ErrorProvider组件编辑:来检查用户输入是否正常(例如,如果输入的数字在范围内等等)。在我看来,将此组件放到每个表单上似乎没有用。如果我创建一个全局对象(或如何调用它)并在每个窗体上使用它会怎么样 我的想法是: namespace MyApplication { static class Program { public static ErrorProvider EP = new ErrorProvider(); .

我有WinForms应用程序和多个表单,希望在每个表单上使用
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是第一个,无论如何,谢谢你让我心情愉快:)祝你有愉快的一天。。。。对不起;)