当前位置:编程学习 > C#/ASP.NET >>

一个简单的功能,送分了!!


想实现用户登录的时候

可以显示一些信息

比如用户点击登录,在一特定的label显示一些信息

比如:正在核对用户名密码,用户名不正确,密码不正确,登录成功

我用sleep和timer好像都不行

各位有什么高招没有?

谢谢了 --------------------编程问答-------------------- 开一个新线程,显示一个Form
这个Form上的按钮都被屏蔽了,只有一个Label,显示楼主需要的信息。
主线程登录成功后,关闭这个form。

--------------------编程问答-------------------- 当点击登陆按钮时,开启一个后台线程来执行查询数据库,lable显示正在核对用户名密码

得到结果后,返回成功或者失败,,

此时关闭线程  ,,,

思路大体就这样了 --------------------编程问答--------------------
。。。

我是个新手啊。。。

整不来这个。。。 --------------------编程问答--------------------
用户名密码都是写在文件里,以后可能要写在狗里

哎,winform太不好搞了。。 --------------------编程问答-------------------- 双击btn,进入代码的btn点击事件,为lbl赋值lbl.text="正在核对用户名密码,用户名不正确,密码不正确,登录成功 ";
lbl要够大,要不显示不全 --------------------编程问答-------------------- 当点击登陆按钮时,开启一个后台线程来执行查询数据库,lable显示正在核对用户名密码 
得到结果后,返回成功或者失败,
此时关闭线程.  --------------------编程问答-------------------- 倒。。。

文件也一样啊。。。

读出来判断就是了。。。

建议你还是吧winform 好好看看。。。

其实就是操作控件 --------------------编程问答-------------------- 恩,我还是上代码吧。。

if (uname == "")
            {
                Username_meg.Text = "*用户名不能为空";
                login_img.Visible = true;
                return;
            }
            else
            {
                if (uname == "Admin")
                {
                    Username_meg.Text = "";
                    login_info.Text = "正在核对用户名";
                    login_info.Text = "用户名正确";
                    login_img.Visible = true;
                }
                else
                {
                    Username_meg.Text = "";
                    login_info.Text = "正在核对用户名";
                    login_info.Text = "非法用户";
                    login_img.Visible = true;
                    return;
                }
            }


login_info这是一个lael,

请问,xiaogangqq123456,我应该怎么操作这个控件,才能让它显示不同的信息
--------------------编程问答-------------------- JAP  --------------------编程问答-------------------- OK --------------------编程问答-------------------- 有没有人有TUXEDO 8.5 啊 --------------------编程问答--------------------             if (uname == "")
            {
                Username_meg.Text = "*用户名不能为空";
                login_img.Visible = true;
                return;
            }
                if (uname == "Admin")
                {
                    Username_meg.Text = "";
                    login_info.Text = "正在核对用户名";
                    System.Threading.Thread.Sleep(5000);
                    login_info.Text = "用户名正确";
                    login_img.Visible = true;
                }
                else
                {
                    Username_meg.Text = "";
                    login_info.Text = "正在核对用户名...";
                    System.Threading.Thread.Sleep(5000);
                    login_info.Text = "非法用户";
                    login_img.Visible = true;
                    return;
                }
            } --------------------编程问答--------------------

if (uname == "")
            {
                Username_meg.Text = "*用户名不能为空";
                login_img.Visible = true;
                return;
            }
            else
            {
                if (uname == "Admin")
                {
                    Username_meg.Text = "";
                    login_info.Text = "正在核对用户名...";
                    login_info.Text += "用户名正确";
                    login_img.Visible = true;
                }
                else
                {
                    Username_meg.Text = "";
                    login_info.Text = "正在核对用户名...";
                    login_info.Text += "非法用户";
                    login_img.Visible = true;
                    return;
                }
            }
--------------------编程问答-------------------- 启动线程,到底是web 还是winform --------------------编程问答-------------------- 是winform

用线程程序会假死,并且也送不到效果

用+=的话,就真没啥技术含量了。。。 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- UP... --------------------编程问答-------------------- 可以用javascript脚本语句,也可以用ajax技术。 --------------------编程问答-------------------- 我晕,是winform好不好 --------------------编程问答-------------------- 接分。。。。。。 --------------------编程问答-------------------- 做完操作后加上
            Application.DoEvents();
就可以了   否则刷新不及时根本就看不到 --------------------编程问答-------------------- LZ这个核对用户名和密码的过程对于程序来说很快的吧,想想,如果实现了你说的那个功能,那这些字显示出来也是一闪而过的,用户根本看不到的。我想还是不要这样做了。 --------------------编程问答--------------------            if (uname == "") 
            { 
                Username_meg.Text = "*用户名不能为空"; 
                login_img.Visible = true; 
                return; 
            } 
            else
            {
                login_info.Text = "正在核对用户名...";
                Application.DoEvents(); 
                ///执行你的验证代码
            } --------------------编程问答--------------------
还是不行。。。。 --------------------编程问答-------------------- 楼上已经都有前台的贴出来了。

我来贴后台的吧:

CREATE  PROCEDURE CheckLoginUser
(
@LoginUser VARCHAR(20),
@Password VARCHAR(200)
)
AS
SET NOCOUNT OFF
if(not exists(select UserID from sysuser where LoginUser=@LoginUser))
begin
return 1  --无此用户
end
else if(not exists(select UserID from sysuser where LoginUser=@LoginUser and enablestate=0))
begin
return 3  --账号已被锁定
end
else if(not exists(select UserID from sysuser where LoginUser=@LoginUser and Password=@Password))
begin
return 2  --错误的登陆密码
end
   else
return 0 --登陆成功

GO --------------------编程问答-------------------- 用js实现ajax吧 --------------------编程问答--------------------
都是些什么啊。。。 --------------------编程问答-------------------- 同意楼主去掉这个功能。。。程序在处理这个时候非常快的。。

你只需要处理最后的,登录成功或者登陆失败就可以了。

或者楼主可以这样,点击登录后,隐藏该窗体,弹出一个进度条的窗体(这里加载时间的长短都可以由自己控制
显示正在登陆,登录成功,
或失败都可以在这个小窗体上面显示),如果登录失败,显示出登录窗体。。成功就进入登录成功后的界面 --------------------编程问答-------------------- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase --------------------编程问答--------------------
最后一顶 --------------------编程问答-------------------- 非得要看到这些信息的  那你就开个线程来看咯  这么快你这样写 你有时间去看到那些信息的吗 --------------------编程问答-------------------- 通过ajax异步查询用户信息,通过获取控件,再用xmlhttp显示值在控件上 --------------------编程问答-------------------- winform里通过web services实现异步查询,用BeginInvoke实现提示 --------------------编程问答--------------------
引用 15 楼 jack_senlan 的回复:
是winform

用线程程序会假死,并且也送不到效果

用+=的话,就真没啥技术含量了。。。


这个效果是用线程的,在新线程中构造一个新窗体。
假死可能是你在主线程中使用Sleep造成的,主线程中不要用Sleep。 --------------------编程问答-------------------- 建立2个form

Form1 显示用户输入,登陆信息
form1的public方法:
public void ViewStatus(string str)
{
    label.Text = str;
}

Form2 处理登陆,Form2的Opacity=0;
form2里的public变量:
string command;
string username;
string password;
form2增加timer,100豪秒检测一次command;

form1里
form2.show;
form2.username= "myname";
form2.password= "mypass";
form2.command = "login";

form2的timer里
int err = 0;
switch(command)
{
case "login":
form1.ViewStatus("正在核对用户名密码");
err = 登陆函数(username,password);
break;
......
}

switch(err)
{
case 0:
form1.ViewStatus("登录成功");
break;
case 1:
form1.ViewStatus("用户名不正确");
break;
case 2:
form1.ViewStatus("密码不正确");
break;
......
}
--------------------编程问答--------------------
引用 34 楼 hack95 的回复:
引用 15 楼 jack_senlan 的回复:
是winform

用线程程序会假死,并且也送不到效果

用+=的话,就真没啥技术含量了。。。


这个效果是用线程的,在新线程中构造一个新窗体。
假死可能是你在主线程中使用Sleep造成的,主线程中不要用Sleep。

用。threadstart(),thread,一个代理方法。
如threadstart ts= threadstart(func)
thread=new thread(ts)
ts.start();
func可以写成一个代理函数,在这个函数里实现前面的验证信息 --------------------编程问答-------------------- 刚面试回来,没学过电子,被刷下来了......

顶 --------------------编程问答-------------------- 1.你可以在输入框TextBox的Leave事件里去执行查数据库的函数,查询的结果显示在lable和picturebox上
  我的项目就这么做的,因为是局域网软件不用考虑延迟情况.
2.用新线程执行查询的话,推荐用BackGroundWorker来做,可以达到你要的异步效果 --------------------编程问答-------------------- 类似的,我之前的方法是:开启多线程,当login线程得到(成功/失败/错误)后,给主线程发送自定义的Message,然后根据该消息来显示不同的Dialog啥的。这个似乎是较理想的方法。
以上只是思路,具体实现搜搜,多了去了,也不难 --------------------编程问答--------------------
引用 27 楼 jack_senlan 的回复:
都是些什么啊。。。

这就要怪你把题目写成了送分题,都来接分了,至于回答嘛,把你搞糊涂了就是胜利。

我到底要不要改写你那段不成文的代码呢?连续改变text的内容,却没有见到任何验证密码的地方,这居然叫验证,所有的显示肯定是一闪而过,除非人为增加线程的暂停。 --------------------编程问答--------------------
楼上大哥能不能给个例子啊 --------------------编程问答-------------------- 学习,学习 --------------------编程问答-------------------- 看到有点晕。 。期待正确回答 --------------------编程问答-------------------- ding! --------------------编程问答-------------------- 再顶顶 --------------------编程问答-------------------- 弄糊涂了,楼主为什么不用messagebox?

还有login_info,这个label是放在哪个窗体???放在登录界面的?

你这个登录界面登录进去后,登录界面会关闭然后进入主界面吗? --------------------编程问答--------------------
再顶一吓 --------------------编程问答-------------------- if (uname == "")
            {
                Username_meg.Text = "*用户名不能为空";
                login_img.Visible = true;
                return;
            }
            else
            {
                login_img.Visible = true;
                login_info.Text = "正在核对用户名";
                while(ture)
                {
                    if (uname == "Admin")
                    {
                        Username_meg.Text = "";
                    
                        login_info.Text = "用户名正确";
                        break;
                    }
                    else
                    {
                        Username_meg.Text = "";
                        login_info.Text = "非法用户";
                        return;
                    }
                }
            }
--------------------编程问答-------------------- 用ajax中的有个等待图标,你可以加个lebal。显示你需要的字 --------------------编程问答-------------------- 用事件比较好吧?

service.CheckingPass += OnCheckingPassword;
service.ValidPass += OnPassVilid;
service.InvalidPass += OnInvalidPass;
OnCheckingPassword(object sender, EventArgs e)
{
   label.Text = "checking...";
}

--------------------编程问答-------------------- --------------------编程问答--------------------
呵呵,算了,算了,准备结贴了 --------------------编程问答-------------------- jf --------------------编程问答-------------------- --------------------编程问答-------------------- 如果代码搞不定那就按钮事件添加if循环。循环里写messagebox,提示用户。然后再进行数据核对 --------------------编程问答-------------------- WinForm中添加一个TextBox,ID为unameTextBox,两个Label,分别为login_info和Username_meg,当按钮button1按下时,模拟验证过程,2秒后显示验证结果,代码如下:

        private void button1_Click(object sender, EventArgs e)
        {
            String uname = unameTextBox.Text;
            if (uname == "")
            {
                login_info.Text = "";
                Username_meg.Text = "*用户名不能为空";
                login_img.Visible = true;
                return;
            }
            else
            {
                //定义委托执行验证操作,这里等待2秒模拟验证需要的时间。
                  Action checkLogin = () =>
                {
                    Thread.Sleep(2000);
                };

                //定义委托执行用户消息显示。
                  Action<string> showmessage = (string msg) =>
                {
                    login_info.Text = msg;
                    login_img.Visible = true;
                };

                //设置验证操作的回调操作。
                  AsyncCallback asy = (IAsyncResult) =>
                {
                    if (uname == "Admin")
                    {
                        this.Invoke(showmessage, "用户名正确");

                    }
                    else
                    {
                        this.Invoke(showmessage, "非法用户");
                    }
                };

                //开始验证。
                  Username_meg.Text = "";
                login_info.Text = "正在核对用户名";

                checkLogin.BeginInvoke(asy, null);
            }
        }
--------------------编程问答-------------------- ding  --------------------编程问答-------------------- winform下可以用BackgroundWorker实现异步操作 --------------------编程问答-------------------- 可以使用相应的控件 --------------------编程问答-------------------- 最简单的,你参考一下
在设置了label的text后把form刷新一下。
之前不显示,你后台是设置过了,但是程序没执行完,后台在继续向下走,但是form并没有被重新载入,所以没有改变。 --------------------编程问答-------------------- 用线程很难啊 --------------------编程问答-------------------- 登录按扭事件,不用线程的解决办法


 lab1.Text = "请稍候,正在验证...";
 Application.DoEvents();
 Thread.Sleep(100);
 
 if(验证成功){
    lab1.Text = "登陆成功!";
    Application.DoEvents();
    Thread.Sleep(100);
 }


然后就是委托,利用委托的异步调用来实现
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,