Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> textBox, scrollBar 
V
    Опции темы
fantast
Дата 15.11.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



вобщем всем привет. моя проблема в следующем, есть textbox c multiline, текста в нем много, тоесть, к примеру,в трое больше его размера и мы видим его среднюю часть, теперь я программно вставляю в него немного измененный текст и разумееться scroll сбиваеться и мы теперь видим начало текста (а не его среднюю часть как было).
мне нужно чтоб позиция scroll'а осталась неизменной, я делаю примерно следующее : выставляю каретку туда  где она стояла и вызываю функцию ScrollToCurret что обеспечивает прокрутку скрола до того места где была каретка, но на практике это лишь обеспечивает то, чтобы мы могли видеть каретку, но не гарантирует тогоже положения скролла что и было.

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

спасибо.
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
peaceduke
Дата 15.11.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 2.4.2007

Репутация: нет
Всего: 2



Может тебе пригодится AutoScrollOffset? С его помощью можно сохранить смещение скролла, а затем восстановить его.
PM MAIL   Вверх
1stain
Дата 15.11.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 4
Всего: 40



Код

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int GetScrollPos(IntPtr hWnd, int nBar);
        [DllImport("user32.dll")]
        static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

        private const int SB_HORZ = 0x0;
        private const int SB_VERT = 0x1;

        private void insertBtn_Click(object sender, EventArgs e)
        {
            int vertScrollBarPosition = GetScrollPos(richTextBox1.Handle, SB_VERT);
            int caretPos = richTextBox1.SelectionStart;
            richTextBox1.Text = richTextBox1.Text.Insert(caretPos, textBox2.Text);
            SetScrollPos(richTextBox1.Handle, SB_VERT, vertScrollBarPosition, true);
        }


не забудь напесать
using System.Runtime.InteropServices;


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
fantast
Дата 16.11.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



пасибо
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
fantast
Дата 19.12.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

Репутация: нет
Всего: 2



Цитата

AutoScrollOffset

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

Цитата

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int GetScrollPos(IntPtr hWnd, int nBar);
        [DllImport("user32.dll")]
        static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

не плохой вариант, за исключением одной детали.. эти функции действительно берут/устанавливают положение scroll'а, но при их использовании скролл не синхротизируется с textbox'ом, другими словами скролл перемещается куда надо, а содержимое текстбокса не прокручиваеться

однако решение найдено! 8)

для меня отлично подошло использование таких свойств как SelectionStart, SelectionLenght, SelectionText

работают считай также как и в обычных текстовых документах, что-то выделяем и меняем выделенный текст, другими словами нужда перекручивать скролл сама собой отпадает
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.