我有一个用于浏览网页和访问数据的表单。它看起来像是下面的东西。
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)任何方法都有同一个按钮的多个事件来实现相同的想法?
感谢。
答案 0 :(得分:2)
1)如果出现低效率等问题?
按钮点击次数在人工时间运行。您可以在不给用户带来不便的情况下烧掉5亿个cpu指令。
2)任何替代方法都可以像不同的旗帜方案一样吗?
使用按钮的Text属性是脆弱的,当有人决定更改按钮文本或将应用程序本地化为其他语言时,代码将会中断。你班上一个简单的私人布尔场要好得多。
3)任何方法都有同一个按钮的多个事件来实现相同的想法?
没有。你当然可以使用两个按钮,彼此叠加,其中一个总是隐藏。使本地化变得更加简单,您将免费获得该bool字段。
答案 1 :(得分:1)
可能会在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等控件容器。你可以拥有一大堆用于不同状态的控件的面板。