C# 将方法返回的值设置为公共字符串
我试图在表单之间传递一个值——在本例中,是DataGridView中高亮显示的单元格的结果 在我的主窗体中,我使用公共字符串方法获取值:C# 将方法返回的值设置为公共字符串,c#,winforms,string,public,C#,Winforms,String,Public,我试图在表单之间传递一个值——在本例中,是DataGridView中高亮显示的单元格的结果 在我的主窗体中,我使用公共字符串方法获取值: public string GetCaseID() { int i; i = dgCases.SelectedCells[0].RowIndex; string caseid = dgCases.Rows[i].Cells[1].Value.ToString(); string v
public string GetCaseID()
{
int i;
i = dgCases.SelectedCells[0].RowIndex;
string caseid = dgCases.Rows[i].Cells[1].Value.ToString();
string version = dgCases.Rows[i].Cells[2].Value.ToString();
return version + "_c" + caseid;
}
//Form2 is launched
private void btnEvLvlUserSelect_Click(object sender, EventArgs e)
{
Form2 form2= new Form2();
form2.ShowDialog();
}
因为GetCaseID()声明为公共字符串,所以我应该能够从Form2中调用它,对吗
在表格2中,我只有以下内容:
private void button1_Click(object sender, EventArgs e)
{
//Take selected case information
fmHome fmhome = new fmHome();
textBox1.Text = fmhome.GetCaseID();
}
我知道跨表单通信是有效的:如果我用一个普通的旧字符串替换GetCaseID(),它将按预期在Form2中显示
这是否也与必须将案件公开有关
谢谢。在
按钮中单击,您正在创建fmHome
类的新实例。这是一个与创建它的fmHome
实例不同的实例,因此它在dgCases
中没有选定的行。在此实例上调用GetCaseID()
,将不会返回您期望的结果
您的按钮1\u单击
处理程序需要有一种方法来调用打开它的表单上的GetCaseID()
。一种非常基本的方法是在Form2
上添加这样的属性:
public fmHome fmHomeParent { get; set; }
然后,当您打开Form2
的实例时,请执行以下操作:
private void btnEvLvlUserSelect_Click(object sender, EventArgs e)
{
Form2 form2= new Form2();
form2.fmHomeParent = this;
form2.ShowDialog();
}
因此,在按钮1u单击处理程序中,您可以访问该实例,而不是创建一个新实例:
private void button1_Click(object sender, EventArgs e)
{
//Take selected case information
textBox1.Text = fmHomeParent.GetCaseID();
}
希望这有帮助 您可以在button1\u Click中创建一个新的fmHome实例,这样它就不包含原始的datagrid
您可以将datagrid实例作为参数传递给Form2构造函数
注意:混合视图和数据的方式将导致无法维护的代码,这不是一个好的做法。。。但我假设您正在处理遗留代码?在您这样做时创建一个新实例不会得到任何有意义的价值
相反,请确保Form2
可以获得对原始fmHome
实例的引用。最常见的模式是添加类型为fmHome
的(private)Form2
成员变量,并将其设置为Form2
构造函数的一部分,要求创建者将其传入(在您的情况下,在btnevluserselect\u Click
。然后您可以在表单2中使用该成员。按钮1\u Click()
方法,而不是创建新的(不可见的)空表单。您还可以执行以下操作:
//Form2 is launched
private void btnEvLvlUserSelect_Click(object sender, EventArgs e)
{
Form2 form2= new Form2(this.GetCaseID());
form2.ShowDialog();
}
然后在表格2中:
public partial class PlayerInfo : Form
{
string caseID;
public Form2(string fmHomeCaseID)
{
caseID = fmHOmeCaseID;
}
// Button Click in your second form
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = caseID;
}
}
您还可以创建一个类,该类保存应用程序所需的所有信息,然后在需要的地方填充,并在另一个表单上从中获取数据,而不必连接这两个表单。但我不知道这是否是最佳解决方案。好的,它使用普通字符串。如果您使用上面的代码,会出现什么问题ppens?我只是在教自己如何编程,现在犯了所有典型的初学者错误。你介意详细解释一下混合视图和数据的含义吗?将视图与模型分离-如果你使用WPF,请查看MVVM模式;如果你使用ASP.NET,请查看MVC模式。只需谷歌,你会发现很多关于它的信息:)甜甜圈-你似乎总是第一个回答并给出非常清晰的解释。这非常有效-再次感谢所有的帮助@大卫:没问题,很高兴我能帮上忙。