[С#]артефакты при прокрутке
никто ничего не понял
но, может быть, double buffer тебе поможет?
но, может быть, double buffer тебе поможет?
может быть
но как ето включить знаю только для OGL
но как ето включить знаю только для OGL
у формы есть свойство DoubleBuffered
или что-то в этом духе
читай по нему хелпу: там надо ещё какие-то свойства в тру выставлять
или что-то в этом духе
читай по нему хелпу: там надо ещё какие-то свойства в тру выставлять
а почему может не работать?
плохо прочитал хелпу?
не ту хелпу?
не хелпу?
не тем?
не ту хелпу?
не хелпу?
не тем?
public void EnableDoubleBuffering
{
// Set the value of the double-buffering style bits to true.
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles;
}
{
// Set the value of the double-buffering style bits to true.
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles;
}
ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaintа так можно ваще?
а чо тебя смущает?
ето из мсдна
ето из мсдна
я просто не знал, что так мона
а почему может не работать?
о
вспомнил
то же самое надо прописать и во всех юзер- и кастом-контролах
так метод SetStyle
ето ж протектед метод
так что для всех не получится
ето ж протектед метод
так что для всех не получится
повторяю
то есть на твоих
юзер- и кастом-контролах
то есть на твоих
свой только один
ето главная форма
вообще то даблбуфер для объекта Graphics работать будет?
ето главная форма
вообще то даблбуфер для объекта Graphics работать будет?
ты что сказал, сам-то понял?
нет, конечно
нет, конечно
ето потому что
не пойму как оно работает
не пойму как оно работает
Graphics не наследуется от Control
причём тут SetStyle?
причём тут SetStyle?
ну так для него как то можно
сделать double buffer?
или как еще можно рисовать и выводить данные?
сделать double buffer?
или как еще можно рисовать и выводить данные?
ещё раз
даббл-буффер ставится на кастом-контрол или форму или ещё что-либо, наследующееся от контрола
то есть объект графикс -- вообще говоря -- не знает, даббл-буферённый у него пэрент или нет
короче
давай свою прогу -- попробую посмотреть, в чём траблы
даббл-буффер ставится на кастом-контрол или форму или ещё что-либо, наследующееся от контрола
то есть объект графикс -- вообще говоря -- не знает, даббл-буферённый у него пэрент или нет
короче
давай свою прогу -- попробую посмотреть, в чём траблы
смотри при прокрутке мерцает
синее - Graphics
синее - Graphics
ок
вечером гляну
вечером гляну
йоптваю!
нафиг мне твой экзешник, а?
сорцы давай!
так я вижу только то, что даббл-буфферизация не работает
всё
нафиг мне твой экзешник, а?
сорцы давай!
так я вижу только то, что даббл-буфферизация не работает
всё
так дабл буфер вообще для graphics можно включить?
(расширил \\otec)
(расширил \\otec)
1. Вынеси отрисовку в отдельный UserControl и уже ему поставь DoubleBuffer
2. Font-ы, Brush-ы и Pen-ы лучше создавай однократно, а не при каждой перерисовке, так как создание этих объектов - довольно длительная операция
3.
this.res_wnd.Paint += new System.Windows.Forms.PaintEventHandler(this.res_draw_anal);
предыдущий обработчик почему не отключаешь?
у тебя же оба будут вызываться.
2. Font-ы, Brush-ы и Pen-ы лучше создавай однократно, а не при каждой перерисовке, так как создание этих объектов - довольно длительная операция
3.
this.res_wnd.Paint += new System.Windows.Forms.PaintEventHandler(this.res_draw_anal);
предыдущий обработчик почему не отключаешь?
у тебя же оба будут вызываться.
как отключит пред обраб?
и еще насчет п.1 то есть?
и еще насчет п.1 то есть?
> как отключит пред обраб?
Через -= можно.
ps
но в данном случае, имхо, лучше вообще от событий отказаться, т.к. события больше заточены под статическую привязку.
> и еще насчет п.1 то есть?
Делаешь Add new user control
уже именно в этом user control-е делаешь отрисовку (вывод графика или что там у тебя а этот user control вставляешь на главную форму.
Через -= можно.
ps
но в данном случае, имхо, лучше вообще от событий отказаться, т.к. события больше заточены под статическую привязку.
> и еще насчет п.1 то есть?
Делаешь Add new user control
уже именно в этом user control-е делаешь отрисовку (вывод графика или что там у тебя а этот user control вставляешь на главную форму.
по поводу 1
принципиальный момент: картинку фигачиьт надо прямо на сам контрол, а не на какую-нить там панельку, в этом контроле расположенную
принципиальный момент: картинку фигачиьт надо прямо на сам контрол, а не на какую-нить там панельку, в этом контроле расположенную
просто так лучше смотриться
дело в том, что у меня были проблемы с распространением даббл-буфферизации на суб-контролы
избегал их описанным выше способом
ну или через кастом-контролы
избегал их описанным выше способом
ну или через кастом-контролы
> просто так лучше смотриться
дык, UserControl клади на панель, а вот наоборот не стоит.
дык, UserControl клади на панель, а вот наоборот не стоит.
Оставить комментарий
olegusmaximus
есть 2 обработчика собития Paintоба в объекте Graphics рисуют таблицу чисел
но с разным фоном
есть полоса прокрутки
на событие Scroll стоит обработчик который вызывает Invalidated
так вот
меняется обработчик для Paint
и когда начинаешь прокручивать таблицу
она какогото прорисовывается по несколько раз
причом видно что и старый обработчик то же работает(видно что фон другой появляется)
так то конечно все нормально
только ета рябь напрягает
если кто чо понял
то жду советов