[英]How to get the Key and the Value of Dictionary<int, string> returned from method
[英]Set returned value from method as public string
我試圖在表單之間傳遞一個值 - 在這種情況下,是DataGridView中突出顯示的單元格的結果。
在我的主窗體中,我使用公共字符串方法獲取值:
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中調用它,對吧?
在Form2中,我只有這個:
private void button1_Click(object sender, EventArgs e)
{
//Take selected case information
fmHome fmhome = new fmHome();
textBox1.Text = fmhome.GetCaseID();
}
我知道跨表單通信的工作原理:如果我用一個普通的舊字符串替換GetCaseID(),它會在Form2中按預期顯示。
是否必須將dgCases聲明為公共?
謝謝。
在button1_Click
,您正在創建fmHome
類的新實例。 這是與創建它的fmHome
實例不同的實例,因此它在dgCases
中沒有選定的行。 在此實例上調用GetCaseID()
將不會返回您所期望的內容。
你的button1_Click
處理程序需要有一種方法在打開它的窗體上調用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();
}
因此,在button1_Click
處理程序中,您可以訪問該實例而不是創建新實例:
private void button1_Click(object sender, EventArgs e)
{
//Take selected case information
textBox1.Text = fmHomeParent.GetCaseID();
}
希望這可以幫助!
您在button1_Click中創建fmHome的新實例,因此它不包含您的原始數據網格。
您可以將datagrid的實例作為參數傳遞給Form2構造函數。
注意:混合視圖和數據的方式將導致無法維護的代碼並且不是一個好的做法...但我假設您正在處理遺留代碼?
正如您所做的那樣創建新實例將不會獲得任何有意義的值。
相反,請確保Form2
可以獲取對原始fmHome
實例的引用。 最常見的模式是添加一個類型為fmHome
的(私有) Form2
成員變量,並將其設置為Form2
構造函數的一部分,要求創建者傳入它(在您的情況下,在btnEvLvlUserSelect_Click
。然后您可以使用它您的Form2.button1_Click()
方法中的成員,而不是創建一個新的(不可見的)空表單。
你還可以做的是以下內容:
//Form2 is launched
private void btnEvLvlUserSelect_Click(object sender, EventArgs e)
{
Form2 form2= new Form2(this.GetCaseID());
form2.ShowDialog();
}
然后在Form2中:
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;
}
}
你還可以做一個類,它包含你的應用程序所需的所有信息,然后在需要的地方填寫它,並在另一個表單上從中獲取數據,而不必連接它們。 但我不知道這是否是最佳解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.