无法将selectedItem获取到文本框

时间:2015-04-08 23:41:02

标签: c# visual-studio-2013

我正在尝试从一个表单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();
    }
}

3 个答案:

答案 0 :(得分:1)

这两行根本不是你想做的。您正在创建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 :(得分:0)

要提几件事:

  1. return string.Empty是多余的。由于上面的一行,该行无法访问

  2. FoodRegister for中,您可以创建主表单的新实例。然后,这会擦除主要表单所持有的任何内容 - 即Animallst.SelectedItem.ToString();

  3. 一种简单的方法是将值设置为静态变量 - 这样您就不必创建表单的新实例来访问它。

    主要形式:

    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();
    }
    

答案 2 :(得分:0)

Haven在一段时间内玩过WinForms,但现在就去了 表格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()