簡體   English   中英

無法將selectedItem獲取到文本框

[英]Cannot get selectedItem to textbox

我正在嘗試從一種表單1獲取列表框選定的項目,以顯示在表單2的文本框中。

到目前為止,它部分起作用。

問題在於它僅獲取在應用程序啟動時選擇的selectedItem。 如果用戶選擇一個新項目,它仍然會獲得被選擇為默認項目的項目。

表格1 MainForm

public MainForm()
{
    public string GetListBoxSelectedItem()
    {
        if (Animallst.SelectedItem != null) //Animallst is the listbox
        {
            return Animallst.SelectedItem.ToString();
            return string.Empty;
        }
    }

    private void foodbtn_Click(object sender, EventArgs e)
    {
        FoodRegister foodForm = new FoodRegister();
        foodForm.Show();
    }
}

表格2 FoodRegister

public partial class FoodRegister : Form
{
    private RecipeManager m_foodmanager = new RecipeManager();

    public FoodRegister() 
    {
        InitializeComponent();

        MainForm main = new MainForm();
        Nametxt.Text = main.GetListBoxSelectedItem();
        //My initializations
        InitializeGUI();
    }
}

這兩行根本不執行您希望它們執行的操作。 您正在創建MainForm全新實例,該實例與原始實例無關。 因此, GetListBoxSelectedItem()也不執行您想要的操作。

MainForm main = new MainForm();
Nametxt.Text = main.GetListBoxSelectedItem();

而是將對原始表單的引用傳遞到第二個表單中:

public FoodRegister(MainForm main) 
{
    InitializeComponent();

    Nametxt.Text = main.GetListBoxSelectedItem();
    ...

然后這樣稱呼它:

FoodRegister foodForm = new FoodRegister(this);
foodForm.Show();

有兩件事要提到:

  1. return string.Empty是多余的。 由於它上面的線,這條線變得無法到達

  2. 在您的FoodRegister中,您將創建主窗體的新實例。 然后,這會擦除主窗體中保存的所有內容,即Animallst.SelectedItem.ToString();

處理此問題的一種簡單方法是將值設置為靜態變量-這樣一來,您無需創建表單的新實例即可訪問它。

主要形式:

public static string GetListBoxSelectedItem()
{
    if (Animallst.SelectedItem != null) //Animallst is the listbox
    {
        return Animallst.SelectedItem.ToString();
    }
    else { return string.Empty(); }
}

食品注冊:

public FoodRegister() 
{
    InitializeComponent();

    MainForm.GetListBoxSelectedItem();
    //My initializations
    InitializeGUI();
}

一段時間沒有玩WinForms,但是在Form 2中

public partial class FoodRegister : Form
{
    private RecipeManager m_foodmanager = new RecipeManager();
    public FoodRegister() 
    {
        InitializeComponent();
        //My initializations
        InitializeGUI();
    }
    public void SetText(string txt)
    {
         Nametxt.Text = txt;
    }
}

在表格1中

public MainForm()
{
    private readonly FoodRegister foodForm = new FoodRegister();

    private void foodbtn_Click(object sender, EventArgs e)
    {
        foodForm.SetText(Animallst.SelectedItem == null ? "" : Animallst.SelectedItem.ToString());
        foodForm.Show();
    }
}

我更換了

GetListBoxSelectedItem()

Animallst.SelectedItem == null ? "" : Animallst.SelectedItem.ToString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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