C # Change Control.Top с 16-битного на 32-битный Int (WinForms) - PullRequest
2 голосов
/ 04 июня 2009

Я работаю над программой, которая перемещает панель внутри формы. Я использую полосу прокрутки, чтобы изменить свойство .Top панелей. Тем не менее, это свойство будет достигать только -32768. В этом случае мне нужно, чтобы он пошел намного выше (или ниже o0). Есть ли в любом случае, я могу изменить его на 32-битное Int, чтобы он мог пойти до -2147483648?


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

Вчера я задал этот вопрос: Как использовать VScrollBar и HScrollBar вместе с RichTextBox?

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

Ответы [ 2 ]

3 голосов
/ 04 июня 2009

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

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

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

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

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

1 голос
/ 04 июня 2009

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

 panel1.top = scrollbar1.value * 3;

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

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

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

panel1.Top = scrolldelta * scrollbar1.value; 
...