2016-09-13 3 views
0

편집 가능한 ComboBox가 있습니다. 사용자가 텍스트를 입력하고 저장 버튼을 누릅니다. 텍스트는 문자열로 바뀝니다.런타임에 app.config에서 새 사용자 설정을 만드는 방법

app.config에 문자열 이름과 함께 새로운 사용자 설정을 만들기 위해 런타임에 필요합니다. (나는이 부분이 현재 작동한다고 생각한다).

다른 ComboBox의 선택한 항목이 설정에 저장됩니다. (객체 참조가 설정되지 않은 오류).

프로그램의 각 컨트롤 상태, 체크 상자, 텍스트 상자 등을 저장하는 사용자 지정 사전 설정을 만드는 것입니다.

// Control State to be Saved to Setting 
Object comboBox2Item = ComboBox2.SelectedItem; 

// User Custom Text 
string customText = ComboBox1.Text; 

// Create New User Setting 
var propertyCustom = new SettingsProperty(customText); 
propertyCustom.Name = customText; 
propertyCustom.PropertyType = typeof(string); 
Settings.Default.Properties.Add(propertyCustom); 

// Add a Control State (string) to the Setting 
Settings.Default[customText] = (string)comboBox2Item; 

이 부분에서 나는 오류가 발생한다.

Settings.Default[customText] = (string)comboBox2Item; 

예외 : 슬로우 : "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."

동일한 오류가있는 문자열 대신 Object에 ComboBox1.Text를 설정해 보았습니다. 텍스트와 문자열도 null이 아닙니다. 여기

Object customText = ComboBox1.Text; 

내가 할 노력하고있어 시각적으로의 Custom User Setting

+0

. 코드를 통해 사용하는 많은 설정은 디자이너를 통해 구성을 수정할 때 Visual Studio에서 생성하는 클래스를 통해 수행됩니다. 구성 파일을 구문 분석하고 수동으로 수정할 수있는 XML 구성 클래스가 있지만 저장하기 전에 변경 내용의 유효성을 검사 할 XSD가 없습니다. 구성을 잘못된 구성 표시로 인해 응용 프로그램이 시작되지 않는 상태로 수정할 수 있으므로주의하십시오. – xtreampb

+0

@xtreampb 내 코드를 업데이트했습니다. 나는 app.config에서 Setting을 생성하고 그 코드를 지나서 실행했다고 생각하지만 Setting에 문자열을 추가하려고 할 때 같은 오류가 발생합니다. –

+0

'Settings.Default [customText]'가 설정 클래스로 컴파일되지 않았기 때문에 오류가 발생했다고 생각합니다. 솔루션 탐색기에서'properties/settings.settings/settings.designer.cs'를 확장하면 기본 인스턴스에 모든 항목이 표시됩니다.설정을 추가 할 때 호출하기 전에 설정 파일을 저장 한 다음 다시로드해야 할 수 있습니다. – xtreampb

답변

0

원래 답변 :

나는 파일에 대한 새로운 설정을 추가 시도하지 않은하지만 난에 있었다 그것을 업데이트하십시오. 저장된 변경 내용을 파일에 저장하고 검색하는 데 사용하는 코드는 다음과 같습니다. 나는 그것이 질문에 직접 답하는 것이 아니라,보고 배우고 싶은 수업에 대해 올바른 방향으로 가르쳐야한다는 것을 알고 있습니다.

호흡 시간이되면이 질문에 직접 대답하도록 업데이트하겠습니다.

public static void UpdateConfig(string setting, string value, bool isUserSetting = false) 
    { 
     var assemblyPath = AppDomain.CurrentDomain.BaseDirectory; 
     var assemblyName = "AssemblyName"; 

     //need to modify the configuration file, launch the server with those settings. 
     var config = 
      ConfigurationManager.OpenExeConfiguration(string.Format("{0}\\{1}.exe", assemblyPath, "AssemblyName")); 

     //config.AppSettings.Settings["Setting"].Value = "false"; 
     var getSection = config.GetSection("applicationSettings"); 
     Console.WriteLine(getSection); 

     var settingsGroup = isUserSetting 
      ? config.SectionGroups["userSettings"] 
      : config.SectionGroups["applicationSettings"]; 
     var settings = 
      settingsGroup.Sections[string.Format("{0}.Properties.Settings", assemblyName)] as ClientSettingsSection; 
     var settingsElement = settings.Settings.Get(setting); 

     settings.Settings.Remove(settingsElement); 
     settingsElement.Value.ValueXml.InnerText = value; 
     settings.Settings.Add(settingsElement); 

     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

편집 답 :

나는 빠른 구글 검색을했고, MSDN 포럼에 허용 대답을 발견했다. MSDN question. 추가 기능을 사용하려면 속성 클래스에서 save를 호출해야합니다. 데이터베이스 트랜잭션을 생각하면 커밋을 호출 할 때까지 적용되지 않습니다.

은 그래서 코드에서 누락 된 것으로 나타납니다 : 후 바로 다음 라인을해야 Properties.Settings.Default.Save(); 당신은 아마도 설정을 저장 한 다음 다시로드 할 필요가 확인하지 않고 Settings.Default.Properties.Add(propertyCustom);

+0

Properties.Settings.Default.Save();를 추가했지만 설정에 문자열을 추가하려고 할 때 오류가 계속 발생합니다. 설정 이름이 만들어 졌다고 생각하지만 추가 할 수는 없습니다. 더 명확하게 질문을 업데이트했습니다. –

관련 문제