c# - 没有从另一个表单的公共方法返回预期值。尽管在同一个类中或在返回特定值时工作正常
问题描述
我有两个表格。表格 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'的方法,这也不起作用。
解决方案
Form5 f = new Form5();
您已经创建了一个全新的Form5,并且以某种方式期望它保留已经存在的其他Form5 的值。这就像买了一个与您的另一个相同品牌的宜家橱柜,然后惊讶地发现您的书不在新柜子里。不,书还在旧书里。
另一个例子:
int x = 5;
int y = new int();
听到 y不是5 ,你会感到惊讶吗?可能不是。这不是一个新概念,你已经知道了。
要获取现有Form5 的值,您需要获取对它的引用,然后在该引用上调用函数。不是新的。没有更多代码很难说,但在某些时候你打开一个 Form5 实例,如果它是一个模式对话框,那么在关闭它之后就可以获取该值。如果不是模态对话框,则需要将打开的 Form5 实例作为参数传递给 Form6 的方法,以便保存以备后用。
推荐阅读
- c++ - 在 C++/C 中通过函数传递数组时,为什么实际参数中使用数组的地址,而形式参数中使用数组?
- python - Pytorch:RuntimeError:输入类型(torch.FloatTensor)和权重类型(torch.cuda.FloatTensor)应该相同
- excel - 如果过去 30 天,如何使用 VBA 突出显示单元格?
- git - 如何通过 netrc.gpg 文件将 git fetch 应用于 crontab
- javascript - 使用范围滑块连续更改输入值,即使鼠标仍按住滑块
- c++ - c++:错误:无法识别的命令行选项'-std=c++17'
- javascript - 用正则表达式标记一个数学中缀符号字符串
- websphere - IBM JVM WebSphere Application Server -XX:+UseG1GC 的作用是什么?-Xgcpolicy:gencon 是否取代?
- android - OnBackPressed() 在活动中不起作用
- linux - 如何在 Linux 中排除字符