我正在尝试从一个表单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();
}
}
答案 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)
要提几件事:
行return string.Empty
是多余的。由于上面的一行,该行无法访问
在FoodRegister
for中,您可以创建主表单的新实例。然后,这会擦除主要表单所持有的任何内容 - 即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();
}
答案 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()