문제

내 Winforms 응용 프로그램에 사용자 지정 메서드 등을 위한 부분 클래스가 있는 Settings.settings라는 "설정 파일"이 있습니다.임의의 키를 기반으로 동적 설정을 로드/저장하는 방법이 있습니까?

예를 들어, 내 애플리케이션에 열 너비를 저장/로드하려는 일부 ListView가 있습니다.각 목록 보기의 각 열에 대한 너비 설정을 만드는 대신 너비를 자동으로 로드/저장하는 간단한 방법을 원합니다.

아래는 구하다 내가 시도한 방법:

internal sealed partial class Settings
{
    public void SetListViewColumnWidths(ListView listView)
    {
        String baseKey = listView.Name;
        foreach (ColumnHeader h in listView.Columns)
        {
            String key = String.Format("{0}-{1}", baseKey, h.Index);
            this[key] = h.Width;
        }
    }
}

해당 코드를 실행할 때 오류가 발생합니다. "'TestsListView-0' 설정 속성을 찾을 수 없습니다." 내가 놓친 것이 있습니까?

도움이 되었습니까?

해결책

열 너비 설정을 XML 직렬화 가능한 객체에 저장하십시오. 즉, 구현하는 것 ixmlserializable 그런 다음 해당 유형의 단일 설정 항목을 설정합니다.

좋은 옵션은 아마도 XML 직렬화 가능한 사전 일 것입니다. 빨리 구글 검색 이를 구현하는 방법을 설명하는 몇 가지 블로그 게시물을 발견했습니다.

다른 답변에서 언급 했듯이이 객체가 사용자 설정인지 확인해야합니다. 설정 인스턴스를 초기화해야 할 수도 있습니다. 즉, xmlserializabledictionary () 인스턴스를 생성하고 설정이 null 인 경우 설정에 할당하십시오. 설정 서브 시스템은 복잡한 설정 객체의 기본 인스턴스를 생성하지 않습니다.

또한 이러한 설정이 어셈블리 버전 (즉, 업그레이드 가능)간에 지속되도록하려면 응용 프로그램 시작시 설정을 업그레이드해야합니다. 이것은 자세히 설명되어 있습니다 Miha Markič 's 블로그와 Raghavendra Prabhu 's 블로그.

다른 팁

오류라고 생각합니다

설정 속성 '키'는 찾을 수 없었습니다.

설정 파일에 '키'값이 존재하지 않기 때문에 발생합니다 (공정한 자체 설명).

내가 아는 한, 당신은 프로그래밍 방식으로 설정 값을 추가 할 수 없으며, 결국 파일에 필요한 모든 설정을 추가하는 것을 조사해야 할 수도 있지만, 일단 거기에 있으면, 나는 당신이 사용할 수 있다고 생각합니다. 변경 사항을 저장하기 위해 제공 한 코드의 일종.

변경 사항을 저장하려면 변경 사항이 '응용 프로그램'이 아닌 '사용자'설정인지 확인해야합니다.

설정 파일은 매우 간단한 XML이므로 XML을 파일에 직접 작성하여 문제를 공격 할 수 있지만 결코 수행 한 적이 없으므로 작동하지 않거나 해당 접근 방식을 권장 할 수는 없습니다.

http://msdn.microsoft.com/en-us/library/cftf714c.aspx 시작할 MSDN 링크입니다.

사용자 설정에서 Settings.Save() 또는 유사한 작업을 수행할 수 있지만 이러한 설정은 예상한 대로 앱 디렉터리의 xxx.exe.config 파일에 유지되지 않습니다.실제로는 사용자 폴더 내부 깊은 곳으로 이동합니다(드라이브에서 xxx.exe.config를 검색하여 찾으세요).다음에 앱 디렉터리에서 xxx.exe.config를 수동으로 변경하면 변경 사항이 이상하게 적용되지 않습니다(시스템은 여전히 ​​사용자 디렉터리에 저장된 것을 사용하고 있습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top