如何将值从主窗体返回到不同的forms或类(C#)
由于一些不明原因,这个愚蠢的事情无法实施。
我在主窗体中有一个int count
,我想返回另一个类或表单。
namespace my_speller { public partial class login : Form { public login() { InitializeComponent(); } int count; private void btnlogin_MouseUp(object sender, MouseEventArgs e) { dbaccess obj = new dbaccess(); for (int i = 0; i < 10; i++) { if (txtusername.Text == obj.Usersusername()[i]) { count = i; break; } } } public int namecount() { return count; } } }
dbaccess
是另一个类,我可以成功地将该类中定义的函数(Usersusername)调用到我的login
表单。 一切都很好。 现在我想从主窗体返回到dbaccess
类的int count
。 所以我实现了一个公共函数namecount
来返回count
。 但是在另一个类中, count
总是为零。 在主窗体中,我正确得到count
的值(即i
)。 但是当我以这种方式从dbaccess
类调用时,没有返回任何内容:
login obj = new login(); // do stuff
或者来自同一程序中的其他表单,如下所示:
namespace my_speller { public partial class student : Form { public student() { InitializeComponent(); } private void button3_Click(object sender, EventArgs e) { login obj = new login(); MessageBox.Show(obj.namecount().ToString()); }
此处的消息框应显示count
,该count
是某个数字,但显示的是零。 可能是什么原因?
当我试图从我的主窗体返回一个字符串时,会发生同样的事情。 它在其他类中始终为null 🙁
提前致谢
编辑:你能给自己的代码片段吗? 我不知道你可能用来帮助我的技术术语
此代码将创建您的登录表单的新实例。 每个实例都有自己的实例变量计数。
login obj = new login(); MessageBox.Show(obj.namecount().ToString());
整数的默认值为0,因此每次创建表单的新实例时,count变量中的值都为0。 如果您希望表单的所有实例具有相同的count值,则应将count设为静态。
private static int count;
当变量是静态的时,Login表单的所有实例只共享一个计数实例。
var form1 = new login(); // mouse up event fires on form1, value of count is set to 3 (for example) var form2 = new login(); form2.namecount(); // returns 3
根据您要执行的操作,还有其他模式,例如使用事件或可以帮助在组件之间传递消息的介体。 这种方式当某种forms发生在某种forms时,其他forms可以对变化做出反应而不需要实际引用甚至知道应用程序中的其他forms。
private void button3_Click(object sender, EventArgs e) { login obj = new login(); MessageBox.Show(obj.namecount().ToString()); }
每次调用button3_Click时,都会实例化一个新的登录对象。 换句话说, obj不是对您的主要表单的引用; 它是对与主窗体相同类型的另一个对象的引用。
每次登录对象实例化时, count都默认为零。
你在哪里展示表格? 您正在做的是代码只是创建登录表单的新实例,并读取nameCount值,该值仍处于其初始化值:0。
我认为你应该使用ShowDialog
并在DialogResult
返回结果。 如果没关系,那就读取计数值。