Como criar um tipo de diálogo de preferências de exibição de árvore de interface no C #?

votos
13

Eu estou escrevendo um aplicativo que é basicamente apenas um diálogo de preferências, bem como as preferências de exibição de árvore de diálogo que se Visual Studio usa. A função da aplicação é simplesmente uma passagem para os dados a partir de um dispositivo de série para um ficheiro. Ele executa muitas, muitas transformações sobre os dados antes de escrevê-lo para o arquivo, para que o GUI para a aplicação é simplesmente todas as definições que ditam o que essas transformações deve ser.

Qual é a melhor maneira de ir sobre a concepção / codificação de um diálogo de preferências de exibição de árvore? A maneira que eu tenho ido sobre isso está construindo a janela principal com um controle de árvore acoplado à esquerda. Então, tenho vindo a criar controles de recipiente que correspondem a cada nó da árvore. Quando um nó é seleccionado, o aplicativo traz que controle recipiente correspondente do nó para a frente, move-a para a posição direita, e maximiza-lo na janela principal. Isso parece muito, muito desajeitado ao projetar-lo. Basicamente, significa que eu tenho toneladas de controles de recipiente além da borda da janela principal durante o tempo de design que eu tenho que manter a rolagem da janela principal até a fim de trabalhar com eles. Eu não sei se isso faz totalmente sentir a maneira que eu estou escrevendo isso, mas talvez este visual para o que eu estou falando fará mais sentido:

projeto

Basicamente, eu tenho que trabalhar com esta forma enorme, com controles de recipiente em todo o lugar, e, em seguida, fazer um monte de tempo de execução reformatação para fazer tudo funcionar. Este parece ser um monte de trabalho extra. Estou fazendo isso de uma maneira totalmente estúpido? Existe alguma maneira óbvia mais fácil de fazer isso que eu estou perdendo?

Publicado 06/08/2008 em 18:22
fonte usuário
Em outras línguas...                            


3 respostas

votos
10

Uma maneira mais limpo é o de criar formas separadas para cada um 'painel' e, em cada construtor forma, definir

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

Dessa forma, cada uma dessas formas pode ser colocado para fora em seu próprio designer, instanciado uma ou mais vezes em tempo de execução, e adicionados à área vazia como um controle normal.

Talvez a principal forma poderia usar um SplitContainercom uma estática TreeViewem um painel, e espaço para adicionar essas formas na outra. Uma vez que eles são adicionados, que poderia ser invertida através da utilização Hide/Showou BringToFront/SendToBackmétodos.

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
Respondeu 06/08/2008 em 19:02
fonte usuário

votos
2

Greg Hurlman escreveu:

Porque não basta mostrar / ocultar o recipiente apropriado quando um nó é selecionado na grade? Ter os recipientes todos de tamanho apropriado no mesmo local, e esconda todos, mas o padrão, que seria pré-selecionado na grade de carga.

Infelizmente, isso é o que estou tentando evitar. Eu estou procurando uma maneira fácil de lidar com a interface durante o tempo de design, com código de reformatação mínima necessária para fazê-lo funcionar durante a execução.

Eu gosto de resposta de Duncan, porque isso significa o projeto de interface de de cada nó pode ser mantido completamente separado. Isso significa que eu não entendo sobreposição nas diretrizes tirando e outras vantagens tempo de design.

Respondeu 06/08/2008 em 19:20
fonte usuário

votos
0

Eu provavelmente iria criar várias classes de painel com base em uma classe base herdando CustomControl. Esses controles teria, então, métodos como Save / Carga e coisas assim. Se assim eu posso projetar cada um desses painéis separadamente.

Eu tenho usado um controle Wizard que no modo de design, manipulado várias páginas, para que se pudesse clique em Avançar no designer e projetar todas as páginas de uma só vez através do designer. Embora este tinha várias desvantagens ao conectar código para os controles, isso provavelmente significa que você poderia ter uma configuração semelhante através da construção de algumas classes de grife. Eu nunca me escreveste aulas de designer no VS, então eu não posso dizer como ou se vale a pena :-)

Eu sou um pouco curioso de como você pretende lidar com a carga / save de valores de / para os controles? Deve haver um monte de código em uma classe, se todas as suas páginas estão em um grande formulário?

E ainda uma outra maneira seria, evidentemente, para gerar o código gui como cada página é solicitada, utilizando informações sobre que tipo de configurações existem.

Respondeu 14/08/2008 em 16:13
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more