一个简单的功能,送分了!!
想实现用户登录的时候
可以显示一些信息
比如用户点击登录,在一特定的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;
}
} --------------------编程问答--------------------
--------------------编程问答-------------------- 启动线程,到底是web 还是winform --------------------编程问答-------------------- 是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;
}
}
用线程程序会假死,并且也送不到效果
用+=的话,就真没啥技术含量了。。。 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 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实现提示 --------------------编程问答--------------------
这个效果是用线程的,在新线程中构造一个新窗体。
假死可能是你在主线程中使用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;
......
}
--------------------编程问答--------------------
用。threadstart(),thread,一个代理方法。
如threadstart ts= threadstart(func)
thread=new thread(ts)
ts.start();
func可以写成一个代理函数,在这个函数里实现前面的验证信息 --------------------编程问答-------------------- 刚面试回来,没学过电子,被刷下来了......
累
顶 --------------------编程问答-------------------- 1.你可以在输入框TextBox的Leave事件里去执行查数据库的函数,查询的结果显示在lable和picturebox上
我的项目就这么做的,因为是局域网软件不用考虑延迟情况.
2.用新线程执行查询的话,推荐用BackGroundWorker来做,可以达到你要的异步效果 --------------------编程问答-------------------- 类似的,我之前的方法是:开启多线程,当login线程得到(成功/失败/错误)后,给主线程发送自定义的Message,然后根据该消息来显示不同的Dialog啥的。这个似乎是较理想的方法。
以上只是思路,具体实现搜搜,多了去了,也不难 --------------------编程问答--------------------
这就要怪你把题目写成了送分题,都来接分了,至于回答嘛,把你搞糊涂了就是胜利。
我到底要不要改写你那段不成文的代码呢?连续改变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秒后显示验证结果,代码如下:
--------------------编程问答-------------------- ding --------------------编程问答-------------------- winform下可以用BackgroundWorker实现异步操作 --------------------编程问答-------------------- 可以使用相应的控件 --------------------编程问答-------------------- 最简单的,你参考一下
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);
}
}
在设置了label的text后把form刷新一下。
之前不显示,你后台是设置过了,但是程序没执行完,后台在继续向下走,但是form并没有被重新载入,所以没有改变。 --------------------编程问答-------------------- 用线程很难啊 --------------------编程问答-------------------- 登录按扭事件,不用线程的解决办法
lab1.Text = "请稍候,正在验证...";
Application.DoEvents();
Thread.Sleep(100);
if(验证成功){
lab1.Text = "登陆成功!";
Application.DoEvents();
Thread.Sleep(100);
}
然后就是委托,利用委托的异步调用来实现
补充:.NET技术 , C#