gpt4 book ai didi

c# - 将不同类中的列表添加到 C# 时触发事件

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:50 25 4
gpt4 key购买 nike

我在处理数据库函数的类中有一个静态列表。如果任何方法抛出异常,我会将异常详细信息添加到列表中。我想在任何时候将项目添加到列表中时触发事件,并在不同类(在本例中为 Windows 窗体类)的 MessageBox 中显示消息。如果添加数据库类中的静态列表,在Forms类中处理事件的最佳方式是什么?

class DatabaseClass
{
// Static list for messages.
public static List<string> messages = new List<string>();

public static DataTable GetOrders()
{
var dt = new DataTable();
var sql = "select * from orders";

using (SqlConnection conn = new SqlConnection(ConString.Orders()))
using (SqlCommand cmd = conn.CreateCommand())
{
try
{
cmd.CommandText = sql;
conn.Open();
dt.Load(cmd.ExecuteReader());
}
catch (Exception ex)
{
// Want to trigger an event when the list is added to.
messages.Add("Problem getting orders. " +
ex.ToString());
}
}
return dt;
}

public partial class Form1 : Form
{
// When the event in the DatabaseClass is triggered,
// display a message box with the message from the list.
}

最佳答案

您可以使用 BindingList<T>来自 System.ComponentModel 命名空间的类代替 List<T>类,因为它包含您要查找的事件:

class DatabaseClass
{
// Static list for messages.
public static BindingList<string> Messages = new BindingList<string>();

然后在您的表单中,您可以简单地监听任何变化的事件:

public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
DatabaseClass.Messages.ListChanged += Messages_ListChanged;
}
}

void Messages_ListChanged(object sender, ListChangedEventArgs e) {
if (e.ListChangedType == ListChangedType.ItemAdded) {
MessageBox.Show(DatabaseClass.Messages[e.NewIndex].ToString());
}
}

关于c# - 将不同类中的列表添加到 C# 时触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974864/

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