gpt4 book ai didi

c# - 从 UserControl 传回信息

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:30 24 4
gpt4 key购买 nike

我刚刚开始了解 UserControl 的概念。

我创建了一个 UserControl 来将一些在 TabControl 的各个页面上重复的控件组合在一起。

其中一些控件是需要验证的文本字段,当验证不成功时,我需要显示一条错误消息。但是我想显示错误消息的地方是在主窗体的状态栏上。

在这种情况下处理验证/错误显示的最佳方法是什么?

最佳答案

要处理验证,请执行以下操作之一:

  • 使用用户控件内部的方法进行验证
  • 让您的用户控件有一个 delegate 可以处理验证的属性(例如 ValidationHandler )(这将允许您拥有一个包含一堆验证器的类,您可以将这些验证器分配给您的控件)

    public delegate void Validator(...)

    public Validator ValidationHandler { get; set; }

  • 让您的用户控件生成验证请求 event (例如 ValidationRequested)

    public event EventHandler<ValidationEventArgs> ValidationRequested

要通知系统发生错误,请执行以下操作之一:

  • 使用 event 感兴趣的各方可以订阅(例如 ValidationFailed )

  • 如果执行验证的对象(通过 delegateevent )也是您要生成错误消息的对象,它可以自己引发错误消息。

编辑:

既然您说过要在控件内部进行验证,则 ValidationFailed 事件的代码可能如下所示:

// In your user control

public class ValidationFailedEventArgs : EventArgs
{
public ValidationFailedEventArgs(string message)
{
this.Message = message;
}

public string Message { get; set; }
}

private EventHandler<ValidationFailedEventArgs> _validationFailed;
public event EventHandler<ValidationFailedEventArgs> ValidationFailed
{
add { _validationFailed += value; }
remove { _validationFailed -= value; }
}

protected void OnValidationFailed(ValidationFailedEventArgs e)
{
if(_validationFailed != null)
_validationFailed(this, e);
}

private void YourValidator()
{
if(!valid)
{
ValidationFailedEventArgs args =
new ValidationFailedEventArgs("Your Message");
OnValidationFailed(args);
}
}

// In your main form:

userControl.ValidationFailed +=
new EventHandler<ValidationFailedEventArgs>(userControl_ValidationFailed);

// ...
private void userControl_ValidationFailed(object sender,
ValidationFailedEventArgs e)
{
statusBar.Text = e.Message;
}

关于c# - 从 UserControl 传回信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/667730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com