我在使用另一种形式的表格方法时遇到问题
编辑:
我按这样编码: (我在textbox1中输入了123)public class Form1 : Form
{
private string user_code;
public string UserCode
{
get { return user_code; }
}
public bool LoginUser()
{
user_code = null;
if(textBox1.Text=="123"){
user_code="usercode";
}
*
*/
}
}
并在form2中使用:
Form1 form1 = new Form1();
form1.LoginUser();
MessageBox.Show(form1.UserName);
现在输出是一个空字符串,我用断点检查,我看到当我在form2中调用loginuser时,textbox1中的值变为空,如果条件变为false 你怎么看待问题??
答案 0 :(得分:2)
您的代码无法编译
使用out参数执行函数时,必须将此参数标记为 out 。
objfrm1.loginuser(out U, out v, out w, out a,out b, out c);
但最好使用公共属性代替参数
例如:
public class Form1 : Form
{
private string user_pass;
private string user_name;
private bool insert_ability;
private bool update_ability;
private bool delete_ability;
public string UserPass
{
get { return user_pass; }
}
public string UserName
{
get { return user_name; }
}
public bool InsertAbility
{
get { return insert_ability; }
}
public bool UpdateAbility
{
get { return update_ability; }
}
public bool DeleteAbility
{
get { return delete_ability; }
}
public bool LoginUser()
{
/*
Your code here
user_pass = "userpass";
user_name = "username";
insert_ability = true;
update_ability = false;
delete_ability = false;
*
*/
}
}
和用法:
Form1 form1 = new Form1();
form1.LoginUser();
MessageBox.Show(form1.UserName);
P.S。请不要使用变量名,如u,v,w,a,b,c等。这是一种不好的做法。
答案 1 :(得分:1)
根据您的代码,当某人在表单上的文本框中输入用户名和密码时,我假设表单1调用该方法。在不了解您使用的数据阅读器或文本框的更多信息的情况下,我认为在第一个文本框检查时调用将失败并返回空字符串。您是否尝试过设置文本框,或者更好地将它们绑定到您可以在表单1中调用methid之前从表单2设置的属性?
编辑:根据您的更新添加代码以显示我的意思。我已经标记了对代码的更改。
public class Form1 : Form
{
private string user_code;
public string UserCode
{
get { return user_code; }
}
private string _testData; //THIS IS NEEDED
public string TestData //THIS IS NEEDED
{
set { _testData = value;} //THIS IS NEEDED
}
public bool LoginUser()
{
user_code = null;
if(textBox1.Text=="123" || TestData=="123") //THIS IS NEEDED
{
user_code="usercode";
}
}
}
并在form2中使用:
Form1 form1 = new Form1();
form1.TestData = "123"; //THIS IS NEEDED
form1.LoginUser();
MessageBox.Show(form1.UserName);
答案 2 :(得分:0)
编辑代码后,它不会再次编译 你确定发布了真实的代码吗?
问题在于:
if(textBox1.Text==123)
TextBox.Text
是string
属性,123
是int
。
您无法直接比较string
和int
值。
那你想做什么?
是否要从Form1
打开Form2
,在Form1
的文本框中输入用户名和密码,然后将其传递到Form2
,对吗?
修改强> 你的解决方案
class FormLogin : Form
{
public string UserName
{
get { return textBoxUserName.Text; }
set { textBoxUserName.Text = value; }
}
public string Password
{
get { return textBoxPassword.Text; }
set { textBoxPassword.Text = value; }
}
public FormLogin()
{
this.Closing += new System.ComponentModel.CancelEventHandler(FormLogin_Closing);
}
void FormLogin_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (this.DialogResult == DialogResult.Cancel) return;
if (!LoginUser(UserName, Password))
{
MessageBox.Show("Username or password is incorrect");
e.Cancel = true;
}
}
bool LoginUser(string userName, string password)
{
// check login and password in database for example
return true;
}
}
class Form3 :Form
{
void LoginButtonClick()
{
FormLogin formLogin = new FormLogin();
formLogin.UserName = "LastUserName";
//uncomment if you want hide main form
//this.Hide();
if (formLogin.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(string.Format("Congratulation! You are logged as {0}", formLogin.UserName));
}
//this.Show();
}
}
不要忘记在FormLogin
上添加两个按钮:确定,DialogResult
属性确定和取消 DialogResult
取消。
答案 3 :(得分:-1)
我用this link解决了我的问题:
解决方案1适用于ASP.NET,据我所知,这是一个Windows 表格应用程序所以在这种情况下,最简单的方法就是通过 从表格1到表格2的引用如下:
表格1:
private void button1_Click(object sender, EventArgs e) { Form2 a = new Form2(this); a.Show(); this.Hide(); }
表格2:
public partial class Form2 : Form { Form1 mainForm; public Form2(Form1 mainForm) { InitializeComponent(); this.mainForm = mainForm; } private void button1_Click(object sender, EventArgs e) { mainForm.Show(); this.Hide(); } }
在调用
this.Hide()
时,表单2还有一件事:表单仍然存在于内存中,它只会被隐藏起来 用户。如果这是你的意图,那就没问题了。但是,如果你 想要处理表单2,请改为调用
this.Close()
。