簡體   English   中英

將方法的返回值設置為公共字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM