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

时间:2011-12-30 12:57:28

标签: c# button text click

我有一个用于浏览网页和访问数据的表单。它看起来像是下面的东西。

 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)任何方法都有同一个按钮的多个事件来实现相同的想法?

感谢。

5 个答案:

答案 0 :(得分:2)

1)如果出现低效率等问题?

按钮点击次数在人工时间运行。您可以在不给用户带来不便的情况下烧掉5亿个cpu指令。

2)任何替代方法都可以像不同的旗帜方案一样吗?

使用按钮的Text属性是脆弱的,当有人决定更改按钮文本或将应用程序本地化为其他语言时,代码将会中断。你班上一个简单的私人布尔场要好得多。

3)任何方法都有同一个按钮的多个事件来实现相同的想法?

没有。你当然可以使用两个按钮,彼此叠加,其中一个总是隐藏。使本地化变得更加简单,您将免费获得该bool字段。

答案 1 :(得分:1)

像Daniel A. White说的那样 有两个按钮

可能会在oncreate / onload等事件上执行check..jst伪代码

 if process is login then
 do 
   //then showLoginButton
    btnlogin.visible

 else
     //download
    btndonload.visible

在登录按钮

        if(Login Successed)
            {
                 btndonload.visible
            }
            else
            {
                LoginButton.Text = "Login";
            }

这可能会更好,有两个按钮,然后单个......还有清洁器

答案 2 :(得分:1)

为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结构保持简单易懂。

答案 3 :(得分:0)

将文本用作状态通常是个坏主意。理想情况下,您应该有2个按钮来触发不同的事件,并将主逻辑调出到MVP模式中的演示者。

答案 4 :(得分:0)

使用Panel和GroupBox等控件容器。你可以拥有一大堆用于不同状态的控件的面板。