2014-10-10 33 views
0

我能夠通過MainForm上的StreamReader填充組合框。我發現現在我需要在不同對話框的幾個不同組合框中提供相同的信息。這個作品接受我似乎無法得到組合框「cbTask」。錯誤狀態「名稱'cbTask'在當前上下文中不存在」。代碼通過Logic.cs在MainForm上填充組合框

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中的信息添加到多個子對話框上的多個組合框。

回答

1

我的第一個答案提供的企業風格的解決方案,所以在這裏,如果你想要一個更簡單,更廣闊的方式來處理你的挑戰的另一種方法。

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); 
    } 
} 
+0

太棒了。我希望能找出3個。 :)所以,我明白,如果你有時間,臨時變量'組合框'包含列表,然後當我在MainForm中調用它將這些項目添加到cbTask?我實際上不得不將公共靜態void調用更改爲private void,所以我沒有在onLoad調用中做所有的事情。非常感謝您非常感謝您。祝你有美好的一天!! – 2014-10-10 17:49:32

0

您是在主窗口還是在單獨的課程中使用該方法?如果它是在一個單獨的班級,這可能解釋爲什麼「cbTask」無法找到。

另外,嘗試使用類似這種string variable = otherForm.TextBox1.Text;

+0

我相信cbTask無法找到,因爲它當前存在於Form1.cs中我試圖在WidgetLogic.cs中訪問它。這是TaskPopulate()駐留的地方。我使用WidgetLogic.TaskPopulate()加載Form1.cs時訪問它。 – 2014-10-10 15:44:38

+0

@FrankPytel在編寫方法之前,請嘗試調用該類。如'textBox1.Text = otherForm.TextBox1.Text;' http://msdn.microsoft.com/en-us/library/aa288422(v=vs.71).aspx – Travis 2014-10-10 15:49:31

1

它移動到一個新的服務的東西,而依賴於服務引用了哪個表,您需要。

示例代碼:

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); 
     } 
    } 
} 
+0

這就是我剛剛走向的地方。嘗試從邏輯中排除cbTask,並從TaskPopulate()中調用任務。看起來像很多工作。我在其中完整的代碼幾乎可以在每個單獨的winForm中調用。 comboBox的內容來自我正在閱讀的文件,因此看起來很浪費。還有誰?? @Silas – 2014-10-10 16:50:28

+1

從設計的角度來看,還有另一個不同之處。雖然您可以直接填充組合框,但會將您的應用程序邏輯耦合到UI關注點。這將會很難在將來改變用戶界面。如果您將應用程序邏輯從UI中分離出來,那麼只有一個地方需要維護邏輯,如果您添加新的表單或更改UI使用數據的方式,則不必更改。 – 2014-10-10 17:15:06