在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)是否有方法使用多个事件来实现相同的按钮?

谢谢。

在c#中单击按钮后更改按钮事件

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。你可以为不同状态的控件设置一大堆面板