首页 > 解决方案 > 没有从另一个表单的公共方法返回预期值。尽管在同一个类中或在返回特定值时工作正常

问题描述

我有两个表格。表格 5 和表格 6。在 Form5 中有一个公共方法 SelectedEvent()。当我创建 Form5 的对象变量时,它不会返回正确的值。当我从 Form5(同一类)的另一个方法调用该方法时,它可以工作。现在另一个连线的事情是 - 当我分配一个特定的值以在该方法中返回时,它可以从 Form6 内部获取!代码将解释更多我希望 -

(我只写了整个项目的必要组件。)

public partial class Form5 : Form
{
`\\there are many other methods too`

SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=FinalLabDairy;Integrated Security=True");
        int x;
        public Form5()
        {
            InitializeComponent();
        }

         public int SelectedEvent()
        {
            return this.x;
        }

`\\the method where i assigned the value of 'x':`
        private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            this.x = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["EID"].Value.ToString());
        }

`\\I'm sure the value has been assigned correctly because it works in the method below:`
        private void button4_Click(object sender, EventArgs e)
        {
            SqlCommand cmd = new SqlCommand(@"DELETE FROM [dbo].[Events] WHERE EID='"+SelectedEvent()+"'", con);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            int x = dataGridView1.SelectedRows[0].Index;
            dataGridView1.Rows.RemoveAt(x);
        }

}

现在在Form6班-


public partial class Form6 : Form
{
private void button1_Click(object sender, EventArgs e)
        {
            Form5 f = new Form5();            
            SqlCommand cmd = new SqlCommand(@"UPDATE [dbo].[Events] SET [Date] = '" + dateTimePicker1.Text + "',[Time] = '" + dateTimePicker2.Text + "',[Title] = '" + txttitle.Text + "',[Description] = '" + txtdesc.Text + "',[Priority] = '" + comboBox1.Text + "',[LastMod] = '" + dateTimePicker1.Text + "'WHERE EID='"+ f.SelectedEvent() +"'", con);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
`\\i put this MessageBox just to see if the value of 'x' coming through correctly`
            MessageBox.Show(f.SelectedEvent().ToString());
        }
}

现在不幸的是 f.SelectedEvent() 没有返回正确的值。相反,它返回“0”。

有趣的是,当我更改 SelectedEvent() 方法中的返回值时,如下所示 -

public int SelectedEvent()
        {
            this.x = 1001;
            return this.x;
        }

它就像一个魅力。我的意思是值 1001 在调用 f.SelectedEvent() 的 Form6 内返回!所以似乎只有当方法从另一个 Form 调用并且 x 的值被分配到方法之外时才会出现问题!

我不知道为什么它没有返回 x 的赋值而不是 0!此外,它如何返回在方法中分配的指定值,但从另一个方法分配时返回 0?注意:当从另一个方法分配时,它以相同的形式工作,所以我们可以找出 x 没有被正确分配的可能性。我也尝试制作'x'和用于分配为'Public'的方法,这也不起作用。

标签: c#.netwinforms

解决方案


Form5 f = new Form5();  

您已经创建了一个全新的Form5,并且以某种方式期望它保留已经存在的其他Form5 的值。这就像买了一个与您的另一个相同品牌的宜家橱柜,然后惊讶地发现您的书不在新柜子里。不,书还在旧书里。

另一个例子:

int x = 5;
int y = new int();

听到 y不是5 ,你会感到惊讶吗?可能不是。这不是一个新概念,你已经知道了。

要获取现有Form5 的值,您需要获取对它的引用,然后在该引用上调用函数。不是新的。没有更多代码很难说,但在某些时候你打开一个 Form5 实例,如果它是一个模式对话框,那么在关闭它之后就可以获取该值。如果不是模态对话框,则需要将打开的 Form5 实例作为参数传递给 Form6 的方法,以便保存以备后用。


推荐阅读