Pergunta

Estou trabalhando em um programa que move um painel dentro de um formulário. Eu uso uma barra de rolagem para alterar os painéis. No entanto, essa propriedade atingirá apenas -32768. Nesse caso, preciso que ele suba muito mais (ou O0). De qualquer forma, existe, eu posso alterá -lo para um Int de 32 bits para que ele possa subir até -2147483648?


editar, talvez se eu esclarecer o que estou tentando fazer, você não vai pensar que será ruim para a usabilidade.

Ontem eu fiz esta pergunta:Como usar o vscrollbar e o hscrollbar juntamente com um richtextbox?

Mas como eu não consegui encontrar uma resposta e o número 1 mais me respondeu, tive que pensar em uma maneira diferente de rolar uma caixa de richtext. Portanto, minha solução foi redimensionar a altura da caixa de texto para igual (altura da fonte de texto * linhas totais). Isso significaria que nenhuma barra de rolagem na caixa de texto seria mostrada. Agora eu uso a barra de rolagem para mover a posição superior das caixas de texto para criar um efeito de pseudo -rolagem. Funciona perfeitamente quando a caixa de texto tem cerca de 2000 linhas a 13 pixels como altura da fonte. Mas depois disso acaba sendo mais alto do que um Int de 16 bits. É por isso que preciso alterá -lo para um Int de 32 bits.

Foi útil?

Solução

As próprias barras de rolagem do Windows estão ligadas a valores de 16 bits. As barras de rolagem WinForm apenas refletem esse limite. Você não pode alterá -lo sem escrever seu próprio controle da barra de rolagem do zero.

Mas você não precisa fazer isso. Não há razão física para ter tantos valores em uma barra de rolagem, porque você não pode rolá -lo mais finamente do que os pixels estão lá na tela, e seu monitor não é mais do que 30000 pixels de altura (ou largo).

O padrão normal é dividir seu valor de domínio por um número apropriado. Geralmente, uma constante serve, mas você também pode usar o seu máximo. Em seguida, você usa esse valor como os índices reais da barra de rolagem.

Por exemplo, digamos que você tenha valores que variam de 0 a 1200355. Você pode o valor máximo da barra de rolagem a 10000 e, em seguida, pode recuperar o valor atualmente selecionado como myscrollbar.value*(10000/1200355) (ou alguns - i i i não tem a sintaxe exata à mão).

Sim, isso significa que você perde alguma precisão - você não poderá selecionar um valor na barra de rolagem que diferem em apenas 3 unidades. Se você realmente precisa desse tipo de precisão, o controle da barra de rolagem não é a ferramenta certa.

Outras dicas

Por fim, se você tiver um painel que precise subir mais do que o limite de uma barra de rolagem, poderá multiplicar o valor da barra de rolagem por um multiplicador específico.

 panel1.top = scrollbar1.value * 3;

O multiplicador pode ser qualquer valor adequado para suas necessidades. Dito isto, uma tela de mais de 30000 pixels é bastante grande.

Além disso, você pode tornar o valor da barra de rolagem proporcional à sua faixa máxima de valores necessários.

areaHeight = 60000;
scrolldelta = areaHeight / scrollbar1.MaxValue;

panel1.Top = scrolldelta * scrollbar1.value; 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top