2009-06-04 3 views
2

Im работает над программой, которая перемещает панель внутри формы. Я использую полосу прокрутки для изменения свойств панели .Top. Однако это свойство достигнет только -32768. В этом случае мне нужно, чтобы он был намного выше (или ниже o0). В любом случае я могу изменить его на 32-битный int, чтобы он мог идти до -2147483648?C# Change Control.Top От 16 до 32 бит Int (WinForms)


редактировать, может быть, если я уточнить, что я пытаюсь сделать, вы много не будет думать, это будет плохо для юзабилити.

Вчера я задал этот вопрос: How to use VScrollBar and HScrollBar together with a RichTextBox?

Но поскольку я не смог найти ответ и no1 меня еще ответил, я должен был думать о другом способе прокрутки RichTextBox. Таким образом, мое решение состояло в том, чтобы изменить размер текстового поля на равный (высота шрифта текстового поля * полные строки). Это означало бы, что никакие полосы прокрутки в текстовом поле не будут показаны. Теперь я использую полосу прокрутки, чтобы переместить верхнюю позицию текстовых полей, чтобы создать эффект псевдопрокрутки. Он отлично работает, когда текстовое поле имеет около 2000 строк в 13 пикселей в качестве высоты шрифта. Но после этого он заканчивается выше, чем 16 бит int. Вот почему мне нужно изменить его на 32-битный int.

+0

Предлагаю внимательно подумать, будет ли этот пользовательский интерфейс использоваться. Похоже, пользователям будет очень удобно перемещаться с помощью этой полосы прокрутки ... – Ant

+2

Вы можете найти это просветительское чтение в отношении ограничений и того, что это означает, если вы столкнетесь с ними: http: //blogs.msdn. com/oldnewthing/archive/2007/03/01/1775759.aspx –

ответ

3

Полоски прокрутки Windows привязаны к значениям 16 бит. Прокрутки полосы WinForm просто отражают этот предел. Вы не можете изменить его, не записывая свой собственный контроль прокрутки с нуля.

Но вам не нужно это делать. Нет никакой физической причины, чтобы иметь столько значений в полосе прокрутки, потому что вы не можете прокручивать ее более точно, чем на экране, чем на экране, а ваш монитор не более 30000 пикселей (или широкий).

Обычный шаблон - это разделить значение вашего домена на соответствующий номер. Обычно константа будет делать, но вы также можете использовать свой максимум. Затем вы используете это значение в качестве фактических индексов полосы прокрутки.

Например, у вас есть значения от 0 до 1200355. Максимальное значение полосы прокрутки до 10000, а затем вы можете получить текущее выбранное значение как myScrollbar.Value * (10000/1200355) (или некоторые такой - у меня нет точного синтаксиса).

Да, это означает, что вы теряете определенную точность - вы не сможете выбрать значение на полосе прокрутки, которое отличается только на 3 единицы. Если вам действительно нужна такая точность, то управление полосой прокрутки не является правильным инструментом.

+1

Думаю, судя по вашему ответу, вы совсем не поняли, что я думаю. Моя полоса прокрутки - это обычная полоса прокрутки с максимальным количеством 1000.его панель, которая должна иметь верхнюю часть более 30000 – Ozzy

1

В конечном счете, если у вас есть панель, которая должна превышать предел полосы прокрутки, вы можете умножить значение полосы прокрутки на определенный множитель.

panel1.top = scrollbar1.value * 3; 

Множитель может быть любым значением, которое подходит для ваших нужд. При этом экран размером более 30000 пикселей довольно большой.

Кроме того, вы можете сделать значение полосы прокрутки пропорциональным максимальному диапазону значений.

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

panel1.Top = scrolldelta * scrollbar1.value; 
Смежные вопросы