在c#中单击按钮后更改按钮事件
本文关键字:按钮 事件 单击 | 更新日期: 2023-09-27 18:19:02
我有一个导航网页和访问数据的表单。它看起来像下面的东西。
private void LoginButton_Click(object sender, EventArgs e)
{
if(LoginButton.Text == Login)
{
LoginButton.Text = "Logging in...";
....
...
Login process goes here...
..
if(Login Successed)
{
LoginButton.Text ="Download";
}
else
{
LoginButton.Text = "Login";
}
}
else if(LoginButton.Text==Download)
{
Download data here...
}
}
相同的按钮(和相同的事件),做两个过程,看起来像不同的事件与标签。1)是否存在效率低下等问题?2)是否有其他方法可以做到这一点,比如不同的旗帜方案?3)是否有方法使用多个事件来实现相同的按钮?
谢谢。
1)是否存在运行效率低下等问题?
按钮点击运行在人的时间。你可以在不给用户带来不便的情况下烧掉5亿条cpu指令。
2)是否有其他方法可以做到这一点,比如不同的标志方案?
使用按钮的Text属性是脆弱的,当有人决定改变按钮文本或当你将应用程序本地化为另一种语言时,你的代码会崩溃。在类中使用一个简单的私有bool字段会更好。
3)任何方法有一个以上的事件相同的按钮来实现相同的想法?
。你当然可以使用两个按钮,放在彼此的顶部,其中一个总是隐藏的。使本地化更简单,你将免费获得bool字段
就像Daniel A. White说的有两个按钮
可能是在oncreate/onload do check..这只是一个伪代码
if process is login then
do
//then showLoginButton
btnlogin.visible
else
//download
btndonload.visible
在登录按钮里面
if(Login Successed)
{
btndonload.visible
}
else
{
LoginButton.Text = "Login";
}
这可能是更好的两个按钮比单一…和更干净
为mouseClick编写自定义事件处理程序
为登录和下载分别编写方法
将自定义事件处理程序注册到按钮单击事件
我假设有一些逻辑决定按钮文本应该是"下载"或"登录"。此时,当然要设置按钮文本,但也要注册适当的事件处理程序。
这将允许你有一个单一的按钮做任何事情
protected void Login_MouseClickHandler (object obj ,MouseClickEventArgs e) {
// login logic
// this would be the logic you say is "inside the login button"
}
protected void Download_MouseClickHandler (object obj ,MouseClickEventArgs e) {
// download logic
}
// pseudo code
// note that there is only one button
if process is login then
theButton.text = "login"
theButton.MouseClick += new MouseClickEventHandler(Login_MouseClickHandler)
else
button.text = "download"
theButton.MouseClick += new MouseClickEventHandler (Download_MouseClickHandler)
end if
软件设计思想
- 更容易扩展。我们不需要为每件新事情都添加另一个按钮
- 关注点分离-例如,所有登录代码都在一个单独的方法中,该方法只执行登录内容。
- 变化被隔离和最小化。与在
if else
结构中内联代码相比,编写新的、单独的方法更不容易出错。因此,if else
结构保持简单易懂。 - 变化被隔离和最小化。与在
使用文本作为状态通常不是一个好主意。理想情况下,您应该有2个按钮来触发不同的事件,并在MVP模式中向演示者调用主要逻辑。
使用控制容器,如Panel和GroupBox。你可以为不同状态的控件设置一大堆面板