C# 有可能使TreeView全球化吗?

C# 有可能使TreeView全球化吗?,c#,winforms,treeview,C#,Winforms,Treeview,我在Form1有一个树视图。我有一个名为“User”的类,我的目的是修改TreeView。是否可以使TreeView全局化并从我的用户类访问?一般来说,您的UI应该是所有其他“业务逻辑”之上的一层 例如,您可能有一些UserManager类,它公开了一个集合IEnumerable,您可以从中填充树。UI上的事件导致对业务逻辑的调用 当业务逻辑中的内容需要更新UI时,它们应该公开为。事件本质上是.NET中的智能“回调函数”。UI为这些事件注册了事件处理程序,并在业务层指示更改时相应地更新自身 cl

我在Form1有一个树视图。我有一个名为“User”的类,我的目的是修改TreeView。是否可以使TreeView全局化并从我的用户类访问?

一般来说,您的UI应该是所有其他“业务逻辑”之上的一层

例如,您可能有一些
UserManager
类,它公开了一个集合
IEnumerable
,您可以从中填充树。UI上的事件导致对业务逻辑的调用

当业务逻辑中的内容需要更新UI时,它们应该公开为。事件本质上是.NET中的智能“回调函数”。UI为这些事件注册了事件处理程序,并在业务层指示更改时相应地更新自身

class User { }
class UserManager {
    public IEnumerable<User> Users { get { ... } }

    public event UserLoggedInEventHandler UserLoggedIn;

}


class UI {
    private UserManager m_usrMgr;

    public UI() {
        m_usrMgr = UserManager.GetSingletonInstance();
        m_usrMgr.UserLoggedIn += UserLoggedInHandler;
    }

    private void AddUserButtonClicked(...) {
        m_userMgr.AddUser(username, ...);
    } 

    private void UserLoggedInHandler(...) {
        MessageBox.Show("User x logged in");
    }
}
类用户{}
类用户管理器{
公共IEnumerable用户{get{…}
公共事件UserLoggedInEventHandler UserLoggedIn;
}
类用户界面{
私人用户管理器m_usrMgr;
公共用户界面(){
m_usrMgr=UserManager.getsingletonistance();
m_usrMgr.UserLoggedIn+=UserLoggedInHandler;
}
私有void AddUserButtonClicked(…){
m_userMgr.AddUser(用户名,…);
} 
私有void UserLoggedInHandler(…){
MessageBox.Show(“用户x登录”);
}
}

使用事件有助于保持类的解耦。有了一个设计良好的系统,您可以使用将整个系统移动到不同的UI,而不必触及业务逻辑;只有调用它并从中侦听事件的代码。

这是一个非常糟糕的设计。您的类不应该与UI耦合。随着我的继续,这一点变得越来越明显。我一直想把它钉在一起。我必须重新评估我的方法。谢谢。请使用用户类中的委托访问Form1表单。