c# - 如何在单击一次按钮时应用多个事件
问题描述
所以我在visual studio c#上使用Windows Forms App。我正在开发一个游戏。为此,我给出了一份“说明”表格。我想以那种形式给出指示。游戏有 4 种模式,所以对于每种模式,我想给出单独的说明。我使用 groupBox 为每种模式提供说明。这意味着在 groupBox 中我添加了 textBox 以进行说明。现在对于 4 种模式,我使用 4 个 groupBox。现在的问题是如何通过单击相同的“NEXT”按钮打开 groupBox2 然后 groupBox3 然后 groupBox4 ?就像当表单加载 groupBox1 加载时一样,这是第一种模式。现在,当用户单击 NEXT 按钮时,groupBox1 变得不可见,而 groupBox2 变为可见,这是第二种模式。然后,当用户再次单击相同的 Next 按钮时,groupBox2 变得不可见,而 groupBox 3 变得可见。
解决方案
对此有几种合理的方法。
一种方法是在类数据中保留一个变量int step
(或类似变量),并在按钮的统一点击处理程序中 do switch (step)
。
另一种方法是拥有单独的点击处理程序,并在第一个点击处理程序中执行,NextButton.Click -= Step1NextClicked; NextButton.Click += Step2NextClicked;
并且在其他点击处理程序中类似。
第二种方法的一个变体是按钮单击处理程序没有任何自己的逻辑,而只是调用一个 Action,它在每个阶段都指向一个单独的处理程序函数。然后,您可以在更改阶段时在单个分配中更新 Action,而不必删除旧处理程序并添加新处理程序。
另一种方法是不仅交换组框,还交换一个同时包含组框和按钮的无边框面板。然后,您实际上有多个 Next 按钮,它们在完全相同的屏幕位置一次显示一个。
我个人会使用第一个选项,因为它非常有效。如果我有多个不同的行为,我可能会使用 Action 方法。
推荐阅读
- javascript - JavaScript key.classList.add 问题
- javascript - WebStorm 中通过 ESLint 规则进行更漂亮的集成
- typescript - Chrome:调试本地打字稿文件不再起作用
- html - 如何将 boostrap3 列自定义为 70px 宽度
- java - Android Volley 身份验证令牌问题发布请求
- c# - Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd) 在所有文件夹上调用
- javascript - 如何过滤包含数组数据的对象的数组?
- hadoop - 尽管添加了会话设置,但查询仍需要时间
- c - 使用来自 C 应用程序的 db2 CLI/ODBC 连接更新表错误?
- angular - 为什么使用异步过滤器会导致无休止的请求?