簡體   English   中英

獲取列表框的selecteditem以顯示在另一個表單上

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

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