通过Logic.cs在MainForm上填充组合框

本文关键字:填充 组合 MainForm Logic cs 通过 | 更新日期: 2023-09-27 18:26:08

我能够通过MainForm上的StreamReader填充comboBox。我现在发现,在不同对话框上的几个不同组合框中,我需要相同的信息。这项工作接受了我似乎无法访问comboBox"cbTask"的事实。错误状态为"名称"cbTask"在当前上下文中不存在"。代码

    public static void TaskPopulate()
    {
        try
        {
            StreamReader task = new StreamReader(dataFolder + TasksFile);
            string tasks = task.ReadLine();
            while (tasks != null)
            {
                cbTask.Items.Add(tasks);
                tasks = task.ReadLine();
            }
        }
        catch
        {
        }
    }

dataFolder是路径,TasksFile是文件名。如果我把它留在MainForm上,效果很好。

有人能给我指正确的方向吗??感谢提前观看!!我很感激。祝你今天过得愉快!!

编辑:在读了几遍之后,我的问题似乎不清楚。我正在尝试将StreamReader中的信息添加到多个子对话框上的多个组合框中。

通过Logic.cs在MainForm上填充组合框

我的第一个答案提供了一个企业风格的解决方案,因此如果您想要一种更简单、扩展性更低的方法来处理您的挑战,这里有另一种方法。

public static class MyTaskComboBoxPopulater()
{
    public static void LoadTasksToCombobox(ComboBox comboBox)
    {
        try
            {
                StreamReader task = new StreamReader(dataFolder + TasksFile);
                string tasks = task.ReadLine();
                while (tasks != null)
                {
                    comboBox.Items.Add(tasks);
                    tasks = task.ReadLine();
                }    
            }
        catch
        {
        }
    }
}
public Form MainForm()
{
    public static void TaskPopulate()
    {
        MyTaskComboBoxPopulater.LoadTasksToCombobox(cbTask);
    }
}

将其移动到一个新的Service,并依赖于所需表单的Service引用。

样本代码:

public class MyService()
{
    public IEnumerable<string> LoadTasks()
    {
        var taskList = new List<string>();
        try
        {
            StreamReader task = new StreamReader(dataFolder + TasksFile);
            string tasks = task.ReadLine();
            while (tasks != null)
            {
                taskList.Add(tasks);
                tasks = task.ReadLine();
            }    
        }
        catch
        {
        }
        return taskList;
    }
}
public Form MainForm()
{
    private MyService _myService = new MyService();
    public static void TaskPopulate()
    {
        foreach(var task in _myService.LoadTasks())
        {
            cbTask.Items.Add(task);
        }
    }
}

您在主窗口中还是在单独的类中有这个方法?如果它在一个单独的类中,这可能解释了为什么找不到"cbTask"。

此外,请尝试使用类似于此string variable = otherForm.TextBox1.Text; 的东西