我在传递数组值方面遇到了问题。
我在一个类中创建了一个数组,然后我在frmMain(form1)
中实例化它然后我在数组中放了一些值(我注册了,我在数组中放了用户名和密码)。 frmMain
应该传递数组中的值吗?
我的问题是当我在frmProfile(form2)
中实例化类(包含数组)时,我从未在其中放入一些值。
简而言之,我希望以各种形式访问数组。我需要一个构造函数方法吗?(像get; set;?)。
public class Tagasalo //this is the class i created
{
public String[,] array = new String[5, 2];
}
继承我在frmMain(form1)中的代码
Tagasalo arr = new Tagasalo();
frmProfile profile = new frmProfile();
int row;
bool validInput = true;
int tries = 3;
public frmMain()
{
InitializeComponent();
}
public void btnSignUp_Click(object sender, EventArgs e)
{
if (txtUsernameS.Text.Trim() == String.Empty)
{
errorProvider1.SetError(txtUsernameS, "Please put a Username.");
}
else if (txtUsernameS.TextLength > 1 && txtUsernameS.TextLength < 4)
{
errorProvider1.SetError(txtUsernameS, "Your Username must have 4 or more characters.");
}
else
{
errorProvider1.Clear();
}
if (txtPasswordS.Text == String.Empty)
{
errorProvider2.SetError(txtPasswordS, "Please put a Password.");
}
else if (txtPasswordS.TextLength > 1 && txtPasswordS.TextLength < 6)
{
errorProvider2.SetError(txtPasswordS, "Your Password must have 6 or more characters.");
}
else
{
errorProvider2.Clear();
}
for (row = 0; row < 5; row++)
{
if (txtUsernameS.TextLength >= 4 && txtPasswordS.TextLength >= 6)
{
if (txtConfirmPassword.Text != txtPasswordS.Text)
{
errorProvider3.SetError(txtConfirmPassword, "Your Password does not match.");
}
else if (txtConfirmPassword.Text == txtPasswordS.Text)
{
if (arr.array[row, 0] == null && arr.array[row, 1] == null)
{
arr.array[row, 0] = txtUsernameS.Text;
arr.array[row, 1] = txtPasswordS.Text;
MessageBox.Show("Signed-Up Successfully!");
break;
}
else if(txtUsernameS.Text == arr.array[row,0])
{
MessageBox.Show("Username already Used.");
break;
}
}
}
}
if (row > 5)
{
MessageBox.Show("Sorry, maximum number of accounts has been reached.");
}
}
这里是我在frmProfile(form2)中的代码 - 在这种形式中我只想让标签显示用户的用户名。
Tagasalo arr = new Tagasalo();
int row;
public frmProfile()
{
InitializeComponent();
}
private void changePasswordToolStripMenuItem_Click(object sender, EventArgs e)
{
frmChangePassword changepass = new frmChangePassword();
changepass.Show();
this.Hide();
}
private void logOutToolStripMenuItem_Click(object sender, EventArgs e)
{
frmMain logout = new frmMain();
logout.Show();
this.Hide();
}
public void frmProfile_Load(object sender, EventArgs e)
{
for (row = 0; row < 5; row++ )
{
if(arr.array[row,0] == arr.array[row,1])
{
lblUsername.Text = arr.array[row, 0];
break;
}
}
}
然后,我想更改密码。替换数组的值,当我注销时,数组再次为空。我无法使用相同的帐户重新登录。
Tagasalo arr = new Tagasalo();
public frmChangePassword()
{
InitializeComponent();
}
private void btnSaveChanges_Click(object sender, EventArgs e)
{
if (txtCurrentPassword.Text == String.Empty)
{
errorProvider1.SetError(txtCurrentPassword, "Please type your Current Password.");
}
else
{
errorProvider1.Clear();
}
if (txtNewPassword.Text == String.Empty)
{
errorProvider2.SetError(txtNewPassword, "Please type your New Password.");
}
else
{
errorProvider2.Clear();
}
if (txtConfirmNewPassword.Text != txtNewPassword.Text)
{
errorProvider3.SetError(txtConfirmNewPassword, "Re-type your New Password.");
}
else
{
errorProvider3.Clear();
}
if(txtCurrentPassword.Text != String.Empty && txtNewPassword.Text != String.Empty && txtConfirmNewPassword.Text == txtNewPassword.Text)
{
MessageBox.Show("Changed Password Successfully!");
frmProfile profile = new frmProfile();
profile.Show();
this.Hide();
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
frmProfile profile = new frmProfile();
profile.Show();
this.Hide();
}
很抱歉,如果时间太长了。我放学后几天都在网上搜索,我找不到答案。
答案 0 :(得分:0)
你是什么意思&#34;你希望变量可以在所有形式中访问&#34; ?
要从另一个类中获取变量,您必须编写classname.variablename来访问它们,对于您的示例,这将是:
Tagasalo.array ......做点东西......
如果你想创建一个描述你通过这个类的构造函数创建的对象的变量和/或方法的类,然后访问那些我建议阅读&#34; Classes&#34;,&# 34;对象&#34;,&#34;实例&#34; 首先如果这对您没有帮助,请再次询问这些知识。
另一件可能有用的事情:如果你想要一个描述变量和/或方法的类,你的应用程序的其余部分应该只能创建一个单独的,只有这个类的实例读取&#34 ;单例类&#34; 强>
希望这会有所帮助,指明你想做什么,我可以帮助你更具体。
答案 1 :(得分:0)
老实说,我不建议使用全局变量,因为它使用了不必要的资源。
然而,
您正在解释/描述的是全局变量。如果您使用的是Windows窗体(我认为您是这样),您可以创建一个类(右键单击您的项目名称&gt;添加&gt;类)。称之为“MyArrayClass&#39;”。
然后(如您所说)使用构造函数MyArray(){get;set}
然后,您可以通过MyArrayClass.MyArray[i]
访问它,其中[i]
是您想要的索引。
我也会在找到一些好的文档后编辑这篇文章。
只需在Form2的构造函数中传递它:
Form2 form2 = new Form2(arr);
form2.ShowDialog();
然后在Form2构造函数中:
public Form2(List<double> arr)
{
//do stuff with it here
}
编辑3
static class Global
{
private static string _globalVar = "";
public static string GlobalVar
{
get { return _globalVar; }
set { _globalVar = value; }
}
}
并且可以使用任何你可以写的地方:
GlobalClass.GlobalVar = "any string value"
这用于字符串值。