[英]Get selecteditem of listbox to display on another form
我想從表單1獲取列表框的selectedItem,以顯示在表單2的文本框中。
這是我嘗試的方法:
表格1. MainForm
:
public partial class MainForm : Form
{
public string GetListBoxSelectedItem()
{
if (Animallst.SelectedItem != null) //Animallst is the listbox
return Animallst.SelectedItem.ToString();
return string.Empty;
}
}
表格2 FoodRegister
:
public partial class FoodRegister : Form
{
private RecipeManager m_foodmanager = new RecipeManager();
MainForm mainform = null;
public FoodRegister()
{
InitializeComponent();
//My initializations
InitializeGUI();
MainForm mainform = new MainForm();
Nametxt.Text = mainform.GetListBoxSelectedItem();
}
private void InitializeGUI()
{
}
}
我沒有收到任何錯誤消息。 問題在於,它僅顯示MainForm啟動時選擇的項目。 如果用戶更改了所選項目,則仍會獲得最初選擇的項目。
更新我嘗試了這個:
MainForm:
public partial class MainForm : Form
{
private void Animallst_SelectedIndexChanged(object sender, EventArgs e)
{
if (Animallst.SelectedIndex > -1)
{
FoodRegister food = new FoodRegister();
if (food != null)
{
food.AddToTextBox(Animallst.SelectedItem.ToString());
}
}
FoodRegister(表格2):
public partial class FoodRegister : Form
{
public FoodRegister()
{
InitializeComponent();
}
public void AddToTextBox(string selectedItem)
{
Nametxt.Text = selectedItem;
}
但這沒用
您需要在主窗體上的列表框中添加selectedIndexChanged事件。 由於您的主窗體實例化了您的第二個窗體,因此請在第二個窗體中創建一個公共方法,主窗體可以調用該方法以將選定的項目添加到文本框中。
// This is in form 1
public partial class MainForm : Form
{
// You only need to instantiate food once
private FoodRegister food = new FoodRegister();
private void MainForm_Load(object sender, EventArgs e)
{
if (food != null)
{
food.Show();
}
}
private void Animallst_SelectedIndexChanged(object sender, EventArgs e)
{
if (Animallst.SelectedIndex > -1)
{
if (food != null)
{
food.AddToTextBox(Animallst.SelectedItem.ToString());
}
}
else
{
// This will clear the text box on form 2
food.AddToTextBox(string.Empty);
}
}
}
// This is in form 2
public partial class FoodRegister : Form
{
public FoodRegister()
{
InitializeComponent();
}
public void AddToTextBox(string selectedItem)
{
Nametxt.Text = selectedItem;
}
}
首先,您需要添加SelectedIndexChanged事件,只需雙擊設計器窗口中的listBox,VS就會為您生成方法。 其次,將static
變量添加到Form1
如下所示:
public partial class MainForm : Form
{
static string myListBoxString;
public Form1()
{
InitializeComponent();
}
...
}
稍后在Form1中,無論何時從ListBox中選擇一項,都將更新靜態變量:
private void Animallst_SelectedIndexChanged(object sender, EventArgs e)
{
myListBoxString = Animallst.SelectedItem.ToString();
}
現在,要在Form2中使用此變量,可以按如下所示輕松訪問它:
public partial class FoodRegister : Form
{
private RecipeManager m_foodmanager = new RecipeManager();
//MainForm mainform = null;
public FoodRegister()
{
InitializeComponent();
//My initializations
InitializeGUI();
//MainForm mainform = new MainForm();
//No need to instantiate the form now, since your variable is static,
//which means it depends on the class not an instance of the class.
Nametxt.Text = MainForm.myListBoxString;
}
private void InitializeGUI()
{
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.