2014-10-10 2 views
0

MainForm의 StreamReader를 통해 comboBox를 채울 수있었습니다. 이제는 여러 대화 상자에서 여러 콤보 상자에서 동일한 정보가 필요할 것입니다. 이 작품은 내가 "콤보 상자"cbTask "에서 얻을 수있을 것 같아 수락 동의합니다. 오류 상태 "이름 'cbTask'현재 컨텍스트에서 존재하지 않습니다." 코드Logic.cs를 통해 MainForm의 ComboBox 채우기

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 가지를 더 찾아 낼 수 있기를 바라고있다. :) 내가 이해할 수 있도록 시간이 있다면 임시 변수 'combobox'가 목록을 보유하고 MainForm에서 호출하면 cbTask에 해당 항목이 추가됩니까? 실제로 public static void에서 private void로 호출을 변경해야하므로 onLoad 호출에서 모든 것을 갖지 못했습니다. 감사합니다. 대단히 감사합니다. 멋진 하루 되세요 !! –

0

주 창이나 별도의 클래스에이 메서드가 있습니까? 그것은 별도의 클래스에 있다면, 그 이유는 "cbTask"찾을 수 없습니다 설명 할 수 있습니다.

또한, 새로운 서비스이 string variable = otherForm.TextBox1.Text;

+0

Form1.cs에 현재 존재하기 때문에 cbTask를 찾을 수 없다고 생각합니다. WidgetLogic.cs에서 액세스하려고합니다. 그것은 TaskPopulate()가있는 곳입니다. Form1.cs가 WidgetLogic.TaskPopulate();로로드 될 때 액세스합니다. –

+0

@FrankPytel 메소드를 작성하기 전에 클래스를 호출 해보십시오. 예 : 'textBox1.Text = otherForm.TextBox1.Text;' http://msdn.microsoft.com/en-us/library/aa288422(v=vs.71).aspx – Travis

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을 호출하기에 거의 비슷할 것입니다. 콤보 상자의 내용은 내가 읽고있는 파일에서 비롯되어 낭비처럼 보입니다. 다른 누군가?? @Silas –

+1

디자인 측면에서 중요한 차이점이 있습니다. ComboBox를 직접 채울 수 있지만 응용 프로그램 로직을 UI 관련 문제로 연결합니다. 앞으로 UI를 변경하기가 어려울 것입니다. UI에서 응용 프로그램 논리를 분리하면 논리를 유지 관리해야하는 곳이 하나뿐이므로 새 양식을 추가하거나 UI에서 데이터를 사용하는 방법을 변경하더라도 변경하지 않아도됩니다. –

관련 문제