我有一个C#应用程序,它由3种形式组成:
1: Battleship Game GUI 2: Network GUI (does client/server connections) 3: Chat GUI
首先加载表单1。当用户选择setup network
时,将显示表单。
当用户选择发送聊天或收到聊天时,会显示聊天。
我希望表单2处理所有消息并将相关消息传递到相关GUI以进一步解码消息。
我还处于发展的早期阶段。目前我trying to use delegates to communicate between the forms。
这是最好的方法吗?关于应用程序组件相互发送消息的最佳实践是什么?
答案 0 :(得分:5)
ikurts,这绝对不是一个好习惯。您的用户界面,无论多少,都应该与通信完全无关。你应该:
听起来您想要遵循设置应用的最佳做法。你会得到很多关于这个问题的反馈,我认为所有这些都会听起来像这样。帮自己一个忙,并遵循它。并远离形式的通信逻辑!!!
还有一些想法:
我不确定为什么你想把它分成三个屏幕,当两个似乎合乎逻辑:1)网络设置对话框2)游戏对话,可以容纳战舰用户界面和你的聊天用户界面。此配置还可以简化您的结构,因为只需要更新一个屏幕,游戏/聊天屏幕。设置对话框就是这样。
这是一个threaded chat application on CodeProject的示例,它可以很好地作为代码库来启动。我想你的战舰移动只是指定电路板命中的“特殊”聊天消息。
此外,这里有一个network enabled tic tac toe game的例子,它可以提供有关开发客户/服务器游戏的线索。
不要回避看似困难的事情!我的建议是首先编写一个没有UI的聊天/通信客户端,也许只是控制台输出。然后添加一个屏幕,您将看到您不必将窗口与网络结合。
祝你好运!更多链接:
这是一个很好的discussion about MVC/MVP,它可以启发你的架构。 here's another ......从不同的角度来看。
答案 1 :(得分:2)
您应该将通信分成不同的类(不在表单中)。
但是,为了使表单彼此保持“同步”,您可以使用c#事件(以及代理来处理它们)来通知一个表单在另一个表单上发生了某些事情。您已经使用事件来处理所有表单操作(鼠标按钮单击等),因此您应该对其工作方式有一个基本的了解,网上有很多关于“c#events”和“c#事件处理的文章” “(有一些搜索条件适合您),它会为您提供更多信息,因此我不会在此详细介绍。事件的优点是系统保持松散耦合,任何人都可以订阅它们,因此您将来很容易添加第四个表单并让它“收听”它所需的信息。