Pergunta

Eu tenho um componente Windows.Forms que tem uma "mySize" propriedade que retorna uma estrutura Size. Minha intenção era ter esta propriedade calcular o mySize retornou automaticamente com base no tamanho do componente, a menos que mySize foi definida explicitamente, caso em que, retornar o valor conjunto de mySize. Infelizmente, agora que estou incorporando o componente em um formulário, designer do Windows Forms decidiu iniciar explicitamente gerar e definir um valor para a propriedade mySize, que está me apertando para cima.

Então eu preciso definir um valor padrão, de modo que o Designer vai embora e me deixe em paz.

Eu li-se nas respostas que lidam com System.ComponentModel.DefaultValue, então eu sei que eu tenho que definir manualmente o valor para a propriedade no construtor, mas as respostas e documentação que eu encontrei apenas lidar com a criação de um valor padrão de falso, uma constante.

A struct Tamanho não é uma constante e assim o compilador VB está enlouquecendo, me dizendo que eu não pode definir um tamanho que o valor padrão para a propriedade do tipo tamanho, porque as dimensões que não são constantes.

Isso faz com que o meu mal cérebro.

eu posso provavelmente código em torno do problema, fazendo métodos getMySize e setMySize em vez de usar uma propriedade, mas eu gostaria de saber se há realmente alguma maneira de definir a propriedade padrão para um Size.

NB: Eu não estou usando mySize como uma espécie de demente tentativa de substituir a propriedade Size (que tem um valor padrão de 150x150, assim que algo parece ser capaz de DefaultValues ??definidos para tamanhos); mySize é apenas algum valor de Tamanho exigido pela classe.

Foi útil?

Solução

Em vez de aplicar o atributo DefaultValue, escrevem os dois métodos a seguir:

bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }

Em ShouldSerializemySize, retornar true se o valor deve ser serializado para o código. Em ResetmySize, redefinir a propriedade para seu valor padrão.

O designer componente irá automaticamente pegar esses métodos através de reflexão.

Mais informações aqui: http://msdn.microsoft.com/en-us/ biblioteca / 53b8022e (VS.71) .aspx

Outras dicas

Tenho notado que há realmente um exemplo específico dado para definir um defaultValue do tipo Size na seção Conteúdo da Comunidade de página MSDN do valor padrão, o que sugere a utilização do construtor DefaultValue descrito em desta página .

Infelizmente, enquanto o exemplo dado não está correto, em que ele funciona, parece-me que a documentação MSDN não seria naturalmente levar alguém a esta resposta.

Eu estou indo para definir a resposta de Albahari como a resposta a esta pergunta (porque sua resposta, pelo menos faz algum tipo de sentido) e deixar este exemplo aqui para ser completo amor.

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