C# - 将在ComboBox中选择的对象传递给下一个表单

时间:2014-12-13 22:00:04

标签: c# object combobox

我希望我的登录表单在单击“登录”按钮时将ComboBox中选择的对象传递给“配置文件编辑器”表单。

表格有三个要素: 退出按钮 登录按钮 ComboBox - 包含用户配置文件列表

        var employeeList = new List<Employee>();
        comboBox1.DataSource = employeeList;
        comboBox1.DisplayMember = "Name";

这就是我现在设置如何显示配置文件的方法。 我希望所选的配置文件是第二个表单上唯一可访问的配置文件,其中我有控件来编辑指定对象的一些bool值。

如何编写本文,以​​便我只在第二个表单上编辑一个配置文件?

编辑:Idle_Mind的评论帮助我达到了成功将正确的Employee对象传递到Profile Editor表单的程度。现在的问题是我不能在这段代码之外使用那个Employee对象:

       public ProfileEditor(Employee emp)
    {
        InitializeComponent();
        Employee currentProfile = emp;
    }

我原本计划使用currentProfile对象来改变每个对象中的一些布尔值,但是currentProfile.isAvailable = true在这段代码之外不起作用。

编辑2:配置文件编辑器上的所有控件现在都可以访问currentProfile。 现在,我可怕的克星,不一致的可访问性错误。 “参数类型'SchedulingApp.Employee'的方法不如方法'SchedulingApps.Forms.ProfileEditor.ProfileEditor(SchedulingApp.Employee)'” 我的员工类,供参考。

class Employee
{
    public string Name { get; set; }
    private bool isAdmin = false;
    public bool[,] isAvailable = new bool[7, 3]
   {           //  Day   Swing  Night
   /*Sunday*/    {false, false, false},
   /*Monday*/    {false, false, false},
   /*Tuesday*/   {false, false, false},
   /*Wednesday*/ {false, false, false},
   /*Thursday*/  {false, false, false},
   /*Friday*/    {false, false, false},
   /*Saturday*/  {false, false, false} 
   };

    public Employee (string m_name)
{
    employeeList = new List<Employee>();
    Name = m_name;
}
    public Employee (string m_name, bool manager)
    {
        Name = m_name;
        isAdmin = manager;
    }

}

2 个答案:

答案 0 :(得分:0)

在ProfileEditor表单中声明一个静态Employee变量:

public partial class ProfileEditor : Form
{
    public static Employee emp;
    public ProfileEditor()
    {
        InitializeComponent();
    }
}

然后在显示ProfileEditor表单之前,将变量设置为您选择的Employee:

ProfileEditor.emp = combobox1.SelectedItem as Employee;
ProfileEditor pe = new ProfileEditor();
pe.Show(this);

现在,您可以在“配置文件编辑器”表单中找到所选的员工对象。

答案 1 :(得分:0)

问题1: 将.SelectedItem转换为Employee并将其传递给Profile Editor的构造函数。

类似的东西:

Employee emp = (Employee)comboBox1.SelectedItem;

问题2: 通常的解决方案是在Profile Editor中的Form级别声明一个Employee变量,然后将Constructor中的引用复制到变量中,以便可以在整个Form中使用它。

问题3: 将public放在class Employee前面,这样就可以public class Employee