0

我有两个子窗体。第一个表单 (Employee) 包含所有文本框和一个用于打开另一个名为 Search 的子表单的按钮。搜索表单有一个组合框。用户从组合框中选择数据后,组合框中的数据将以员工形式显示。

员工表格:

public string s;
protected override void OnShown(EventArgs e)
{
    txtName.Text = s;
    base.OnShown(e);
}

搜索表格:

private void cbFind_SelectedValueChanged(object sender, EventArgs e)
{
    if (cbFind.SelectedItem != null)
    {
        emp em = new emp();
        em.s = cbFind.SelectedItem.ToString();
        em.ShowDialog();
    }
}

我不希望在用户从组合框中选择数据后打开另一个员工表单。我希望它出现在已经打开的员工表格上..

编辑:

员工表格

namespace Master
{
    public partial class Employee : Form
    {
        public Employee()
        {
            InitializeComponent();
            searchForm.ItemSelected += ItemSelected;
        }

        private SearchForm searchForm = new SearchForm();

        private void ItemSelected(object sender, ItemSelectedEventArgs e)
        {
            txtName.Text = e.SelectedItem.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SearchForm searchForm = new SearchForm();
            searchForm.Show();
        }
    }
}

搜索表格

namespace Master
{
    public partial class SearchForm : Form
    {
        public SearchForm()
        {
            InitializeComponent();
        }

        private void SearchForm_Load(object sender, EventArgs e)
        {

        }

        private void cbFind_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbFind.SelectedItem != null)
            {
               if(ItemSelected != null) 
                   ItemSelected(this, new ItemSelectedEventArgs(cbFind.SelectedItem));
            }
        }

        public delegate void ItemSelectedEventHandler(object sender, ItemSelectedEventArgs e);

        public event ItemSelectedEventHandler ItemSelected;
    }

    public class ItemSelectedEventArgs : EventArgs
    {
        public object SelectedItem { get; set; }
        public ItemSelectedEventArgs(object selectedItem)
        {
            SelectedItem = selectedItem;
        }
    }
}
4

2 回答 2

1

有很多方法可以实现你想要的,我最喜欢的是使用某种 . 是的event,这event是现代编程语言中最有趣的东西之一,比如 C#(在 .NET 环境中)。但是,您可以像这样选择另一种解决方案:

//in your Search form
public string ShowSearch(){
    if(ShowDialog() == DialogResult.OK){
       return cbFind.SelectedItem == null ? "" : cbFind.SelectedItem.ToString();
    }
    return "";
}
//returning "" means some kind of cancel action which will result no search performed.

Search form应该是您的一个元素Employee form,您可以使用上面的方法显示您的搜索表单并获取返回的选定项值。

在某些情况下这不是一个体面的方式,这里我向您介绍使用事件的方式,您必须声明一些事件来通知用户选择并在您的员工表单上显示所选项目:

//your Employee form
public class Employee : Form {
    public Employee(){
       InitializeComponent();
       searchForm.ItemSelected += ItemSelected;
    }
    //Search form
    private SearchForm searchForm = new SearchForm();
    //your ItemSelected handler
    private void ItemSelected(object sender, ItemSelectedEventArgs e){
       txtName.Text = e.SelectedItem.ToString();
    }
}
//your Search form
public class SearchForm : Form {
  public SearchForm(){
     InitializeComponent();
  }
  //handler for your combobox SelectedValueChanged event.
  private void cbFind_SelectedValueChanged(object sender, EventArgs e)
  {
    if (cbFind.SelectedItem != null)
    {
       if(ItemSelected != null) ItemSelected(this, new ItemSelectedEventArgs(cbFind.SelectedItem);
    }
  }
  public delegate void ItemSelectedEventHandler(object sender, ItemSelectedEventArgs e);
  //your own event
  public event ItemSelectedEventHandler ItemSelected;
}
public class ItemSelectedEventArgs : EventArgs {
  public object SelectedItem {get;set;}
  public ItemSelectedEventArgs(object selectedItem){
     SelectedItem = selectedItem;
  }
}

您可以使用在类之间传递值的传统方式......但我建议使用事件(如上面的代码所示)或至少某种delegate. 在 .NET 环境中编程需要您熟悉事件和委托更多...

于 2013-07-08T15:16:07.873 回答
0

在您的父母表格上,您应该这样做

     private void button1_Click(object sender, EventArgs e)
    {
        Form1 searchForm = new Form1();
        if (searchForm.ShowDialog() == DialogResult.OK)
        {
            string selectedRecord =  searchForm.SelectedRecord;
        }
    }

其中 button1 是您打开搜索表单的按钮。Form1 是您的搜索表单。selectedRecord 是您在关闭搜索表单之前设置的属性。我假设它是一个字符串,尽管它可以是任何对象。

于 2013-07-08T10:17:22.837 回答