问题描述
privatestringPawread(){stringusername="";frmMainfrmmain=newfrmMain();username=frmmain.toolStripStatusLabelUser.Text.ToString();//在此句设断点调试发现username=""this.textBox1.Text="";stringconnectionString=@"DataSource=CHINA-2FD3DC67C;InitialCatalog=Test;IntegratedSecurity=True;Pooling=False";SqlConnectionmyConnection=newSqlConnection(connectionString);myConnection.Open();SqlCommandmyCommand=myConnection.CreateCommand();stringsql="selectpasswordfromt_userwhereusername='"+username+"'";myCommand.CommandText=sql;SqlDataReadermyDataReader=myCommand.ExecuteReader();stringpsw="";if(myDataReader.HasRows){while(myDataReader.Read()){psw=myDataReader["password"].ToString();}}myDataReader.Close();myConnection.Close();returnpsw;}//这是frmMain的相关代码运行无错可显示toolStripStatusLabelUser.Text内容privatevoidfrmMain_Load(objectsender,EventArgse){Form1form1=newForm1();form1.ShowDialog();if(form1.IsLogin){this.toolStripStatusLabelUser.Text=form1.CurrentUser.Username;this.toolStripStatusLabelTime.Text=System.DateTime.Now.ToString();}else{this.Close();}}
请问为什么不能显示frmmain.toolStripStatusLabelUser.Text内容在frmMain.Designer.cs中已改为publicSystem.Windows.Forms.ToolStripStatusLabeltoolStripStatusLabelUser;如果将username=frmmain.toolStripStatusLabelUser.Text.ToString();改为username=form1.CurrentUser.Username;一样不行谢谢
解决方案
解决方案二:
飘过.............
解决方案三:
frmMainfrmmain=newfrmMain();你是先运行的这个窗体,让frmmain.toolStripStatusLabelUser.Text先有值,你才会在另一个窗体的Pawread类里获取到值,我刚才试了一下,是可以获取到值的(方法没错,其实想获取当前用户有很多可以实现的方法)
解决方案四:
风吹草动
解决方案五:
是窗体传值吗,试一下用构造函数吧,我没看见你传值啊,你却要取值,怎么可以呢,关于窗体传值,看看我的博客吧,我写了一个系列
解决方案六:
frmMainfrmmain=newfrmMain();
后面应该加上:frmmain.ShowDialog()
另外:username=frmmain.toolStripStatusLabelUser.Text.ToString();应改为:username=frmmain.toolStripStatusLabelUser.Text;因为frmmain.toolStripStatusLabelUser.Text本身为string类型.
解决方案七:
楼上的貌似有理可我的frmmain里面也调用了frmlogin了啊运行到frmMain.ShowDialog()就调出frmlogin了成死循环了
解决方案八:
引用3楼luofuxian的回复:
风吹草动
见牛羊
解决方案九:
我是这么理解你的意图,你有一个窗体frmMain(我怀疑应该是FormMain吧)。你还有一个Form1。Password()方法是Form1上的。我猜Form1是用来输入密码的对话框。那么,你应该是希望frmMain在启动的时候调用用Form1来输入密码,并验证。而用户输入用户名是在Form1。如果我理解的没有错的话,应该这么改(原理我就不解释了,想要求甚解的话,可以多去看些面向对象的基础知识。)://1.添加一个成员变量privateinputUsername;privatestringPawread(){stringusername="";//2.下面两句不要了//frmMainfrmmain=newfrmMain();//username=frmmain.toolStripStatusLabelUser.Text.ToString();//3.改成下面这一句:username=inputUsername;//4.下面该干嘛还干嘛不用改}//5.新写一个构造函数publicForm1(stringusername){inputUsername=username;//6.下面是你构造函数里原来的东西,都copy过来就可以。}//7.改一下frmMain的代码privatevoidfrmMain_Load(objectsender,EventArgse){//8.改下面这一句Form1form1=newForm1(toolStripStatusLabelUser.Text.ToString());//9.后面不用改}
解决方案十:
你的代码开头就不对。在主窗口加载的时候已经把username传给了form1中的username去了。可你在开始的时候又写了句stringusername="";这不是又把它赋为空值了吗?改为publicstringusername;设为公共变量下面的这句话就不要了:frmMainfrmmain=newfrmMain();username=frmmain.toolStripStatusLabelUser.Text.ToString();试试看把
解决方案十一:
看看!!!
解决方案十二:
谢谢大家指点我的想法是frmMain是主窗体form1是登录窗体frmchange为修改密码登陆后在frmmain.toolStripStatusLabelUser.Text显示登录用户名成功但在frmchange中就不能调出form1的CurrentUser.Username也不能调出frmMain的frmmain.toolStripStatusLabelUser.Text