繁体   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