如何将值从主窗体返回到不同的窗体或类(C#)

时间:2011-03-22 13:12:33

标签: c# class forms return-value

由于某些未知的原因,这个愚蠢的事情无法实施。

我在主表单中有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表单。一切都很好。现在我想将主表单中的int count返回到dbaccess类。所以我实现了一个公共函数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,这是一些数字,但显示的是零。可能是什么原因??

当我尝试从主窗体返回一个字符串时,会发生同样的事情。它在其他类中始终为null :(

提前致谢

编辑:您可以自己提供代码段吗?我不知道你可能用来帮助我的技术术语

3 个答案:

答案 0 :(得分:4)

private void button3_Click(object sender, EventArgs e)
{
   login obj = new login();
   MessageBox.Show(obj.namecount().ToString());
}

每次调用button3_Click时,都会实例化一个新的登录对象。 换句话说, obj 不是对您的主要表单的引用;它是对与主窗体相同类型的另一个对象的引用。

每次实例化登录对象时,计数默认为零。

答案 1 :(得分:2)

此代码将创建您的登录表单的新实例。每个实例都有自己的实例变量count。

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

根据您要执行的操作,还有其他模式,例如使用事件或可以帮助在组件之间传递消息的介体。这种方式当某种形式发生在某种形式时,其他形式可以对变化做出反应而无需实际需要引用甚至知道应用程序中的其他形式。

答案 2 :(得分:0)

你在哪里展示表格?您正在做的是代码只是创建登录表单的新实例,并读取nameCount值,该值仍处于其初始化值:0。

我认为您应该使用ShowDialog并将结果返回到DialogResult。如果没关系,那就读取计数值。