2013-12-09 4 views
1

측정하려는 위치에 응용 프로그램을 만들려고하므로 많은 양의 가속도계에 대한 설정을 저장할 수 있습니다. 문제는 내가 얼마나 많은지 모르겠다. 그러므로 내가 추가하는 각 가속도계에 대한 가속도계 설정 (가속도계, 주파수 범위 등의 이름)의 새 인스턴스를 만들 수 있기를 원한다. 시스템. 설정을 구성하려면 가속도계의 이름을 표시하는 ListBox를 추가하고이 상자의 항목을 클릭하면 페이지의 텍스트 상자가 설정으로 채워 져야합니다.여러 설정 인스턴스 만들기

... 적어도 그것은 이론입니다. 누구든지 내 AccelerometerSettings 클래스의 인스턴스를 텍스트 상자의 문자열을 기반으로 만드는 방법을 알고 있습니까? 즉, 대신;

AccelerometerSettings SomeRandomAccelerometer = New AccelerometerSettings(); 

나는 각각의 새로운 가속도계에 대한

AccelerometerSettings TheNameTypedInTheTextBox = New AccelerometerSettings(); 

을 가지고 싶습니다. 아니면 SettingsClass가 어떻게 작동하는지 완전히 오해 했습니까?

그리고 모든 가속도계를 ListBox에 표시하고 클릭 할 때 텍스트 상자에 설정을 표시하려면 어떻게합니까?

미리 감사드립니다.

+1

예제는 변수의 이름을 수정하기 만합니다. 아마도 당신의 의도는 아닙니다. 설정을 보유하고있는 센서의 유형에 따라 AcceleromterSettings 생성자에 전달되는 외부 구성 파일을 선택할 수 있습니다. 그런 다음 생성자는 해당 파일을 사용하여 설정을 결정합니다. 구성 파일 경로는 textBox 값을 키로 사용하여 사전에 보관할 수 있지만 새로운 센서마다 소스 변경이 필요합니다. – Michael

+1

AccelerometerSettings에 익숙하지 않지만 객체에 문자열을 연결하는 작업이 있다면 Dictionary 를 사용할 가능성이 높습니다. 이 작업을 수행 할 수있는 몇 가지 다른 방법이 있지만 가장 쉬운 방법이라고 생각합니다. – Evgeni

+0

@ 마이클 : 고마워,하지만 나는 따라하지 않아! 이미 Visual Studio 도구로 만든 설정 파일이 있습니다. 하지만 다른 유형의 구성 파일을 추가해야한다는 것을 의미합니까?그렇다면 어떤 유형의 구성 파일이고 그 파일에 정확히 무엇을 저장해야합니까? 그리고 소스 코드가 변경되면 각 센서에 대해 코드를 수정해야한다는 의미입니까? – user2950764

답변

1

기본적인 이해 문제가있는 것 같습니다.

AccelerometerSettings TheNameTypedInTheBox = New AccelerometerSettings();

또한 새 개체 인스턴스로 초기화되는 AccelerometerSettings 형식의 변수에 대한 C# 선언입니다.

런타임시 명명 된 컬렉션 설정을 유지하려면 컬렉션 클래스를 사용해야합니다.

이름으로 새로운 인스턴스를 추가하는 예를 들어, 사전 클래스를

Dictionary<TKey,TValue> 

선언을 사용할 수 있으며, 사용을

var MySettings = new Dictionary<string,AccelerometerSettings>(); 

로 MySettings에 추가() 메소드를 당신의 사전을 초기화 (사용자가 제공). 사전

+0

게리! 의심의 여지없이 나는 이런 종류의 프로그래밍을 처음 접했습니다! 내 생각에 Visual Studio 도구를 사용하여 새 설정 집합을 만들었으므로 수동으로 설정 파일의 새 인스턴스를 만들고 이름을 바꿉니다. 당신과 유진의 해결책은 위대한 것 같지만 새로운 질문을 제기합니다. 첫째, 설정을 세션간에 유지할 수 있도록이 설정을 쉽게 저장하는 방법은 무엇입니까? 시동시이 모든 설정을 읽어야합니까, 아니면 자동으로 저장됩니까? 미리 감사드립니다! – user2950764

+1

@ user2950764 당신은 아마도 그것을 위해 새로운 질문을 만들고 당신이 좋아하는 답변을 표시 할 것입니다. – Evgeni

+0

@Eugene : 아마도 옳은 것 같습니다. 미안, 나는 그것에 대해 잊었다! – user2950764

1

당신이 찾고있는 것에 가까운 것을 달성 할 수있는 아주 기본적인, 순진한 구현입니다. 그것은 크게 개선 될 수 있지만 올바른 방향으로 가야합니다.

using System.Collections.Generic; 

class SettingsManager 
{ 
    Dictionary<string, AcceleromterSettings> settings; 

    // contructor for SettingsManager class; a fundamental C# concept 
    public SettingsManager() 
    { 
     LoadSettings(); 
    } 

    // creates new instances of AccelerometerSettings and stores them 
    // in a Dictionary<key, value> object for later retrieval. The 
    // Dictionary object uses a unique-key to access a value 
    // which can be any object. 
    void LoadSettings() 
    { 
     settings = new Dictionary<string, AcceleromterSettings>(); 

     AcceleromterSettings horizontal = new AcceleromterSettings(); 
     horizontal.AttributeOne = 101; 
     horizontal.AttributeTwo = 532; 
     horizontal.AttributeThree = 783; 
     settings.Add("Horizontal", horizontal); 

     AcceleromterSettings vertical = new AcceleromterSettings(); 
     vertical.AttributeOne = 50; 
     vertical.AttributeTwo = 74; 
     vertical.AttributeThree = 99; 
     settings.Add("Vertical", vertical); 
    } 

    // Retrieves settings from the Dictionary while hiding 
    // specific implementation details. 
    public AcceleromterSettings GetSettings(string name) 
    { 
     AcceleromterSettings setting = null; 

     // this method of Dictionary returns a Boolean value indicating 
     // whether or not the value retrieval worked. If the Key is found 
     // in the dictionary, the 'out' parameter is modified reflect 
     // the value, and the method returns true. If the key is not found 
     // the 'out' parameter is not modified, and the method returns false. 
     if (!settings.TryGetValue(name, out setting)) 
      throw new ArgumentException(string.Format("Settings not found for settings name {0}", name)); 

     return setting; 
    } 
} 
+0

많은 감사합니다! 하지만 몇 가지 질문 만해도 SettingsManager() 메서드와 LoadSettings는 무엇을합니까? 시작할 때 모든 설정을 읽으십니까? setting = null은 무엇입니까; GetSettings()에서 null을 반환하는 것을 볼 수 있겠습니까? – user2950764

+1

@ user2950764 편집을 참조하십시오. 추가 질문이 있으면 알려주십시오. – Michael

+0

다시 @Michael, 많은 감사합니다! 내가 이상한 오류가 많이 발생하지만, "type 'Program.AccelerometerSettings'에 대한 정의가 이미 'defaultInstance'(내가 작성하거나 사용하지 않은 변수) 및 거의 모든 속성에 대해 동일한 것을 포함하고 있습니다. 추가를 클릭하십시오. 오류가 두 번 클릭하면 자동 생성 된 코드가 나타납니다. 어떤 생각이 이것에 대해 무엇입니까? – user2950764

관련 문제