Pergunta

Eu tenho um "arquivo de configurações" no meu aplicativo WinForms chamado Settings.settings com uma classe parcial para métodos personalizados, etc. Existe uma maneira de Carregar / Salvar configurações dinâmicas baseadas em chaves arbitrárias?

Por exemplo, eu tenho algumas ListViews no meu aplicativo em que deseja salvar / carregar as larguras das colunas; Em vez de criar uma configuração de largura para cada coluna para cada exibição de lista Eu gostaria de um método simples para Carregar / Salvar as larguras automaticamente.

Abaixo está um exemplo do Salvar método que eu tentei:

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;
        }
    }
}

Ao executar esse código eu recebo o erro "A propriedade configurações 'TestsListView-0' não foi encontrado." Existe algo que eu estou ausente?

Foi útil?

Solução

Guarde a sua coluna de largura configurações em um objeto XML Serializable. Ou seja, algo que implementa IXmlSerializable seguida, criar uma única entrada configuração desse tipo em Settings.settings.

Uma boa opção seria provavelmente um Serializable dicionário XML. Uma rápida Google Search encontrados muito poucos diferentes posts que descrevem como implementar isso.

Como mencionado em outras respostas que você precisa para garantir que esse objeto é uma configuração de usuário. Você também pode precisar para inicializar a instância configuração. Ou seja, criar uma instância XmlSerializableDictionary () e atribuí-lo à configuração se a configuração é nulo. As configurações de subsistema de não criar instâncias padrão de objetos de configuração complexas.

Além disso, se você quiser que essas configurações para persistir entre as versões de montagem (ou seja, ser modernizadas), você precisará atualizar as configurações na inicialização do aplicativo. Isto é descrito em detalhes na do Miha Markic blog e href="http://blogs.msdn.com/rprabhu/articles/433979.aspx" rel="nofollow noreferrer"> Raghavendra de Prabhu.

Outras dicas

Você pode fazer Settings.Save () ou similar sobre as configurações do usuário, mas nota que tais definições não iria ficar persistiu até o arquivo xxx.exe.config em seu diretório de aplicativo como você esperaria. Eles realmente ir em algum lugar dentro da pasta de usuário (procurar a unidade para xxx.exe.config para encontrá-lo). Da próxima vez que você alterar manualmente xxx.exe.config em seu diretório de aplicativo, a mudança vai misteriosamente não se aplicar (o sistema ainda está usando o salvou um do diretório do usuário).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top