Перерисовка во время перетаскивания

Вот адаптация решения silvertab с модифицированными дженериками:

static  T[] concat(T[] a, T[] b) {
    final int alen = a.length;
    final int blen = b.length;
    final T[] result = (T[]) java.lang.reflect.Array.
            newInstance(a.getClass().getComponentType(), alen + blen);
    System.arraycopy(a, 0, result, 0, alen);
    System.arraycopy(b, 0, result, alen, blen);
    return result;
}

ПРИМЕЧАНИЕ: См. ответ Иоахима для решения Java 6. Это не только устраняет предупреждение; это также короче, более эффективно и легче читать!

7
задан Greg McGuffey 25 July 2009 в 00:03
поделиться

2 ответа

Вызов this.Invalidate () , чтобы форма / элемент управления перерисовывались. Если вам известен конкретный регион, вызовите один из перегруженных методов, чтобы указать, что следует аннулировать. Например:

Rectangle toInvalidate = new Rectangle(drgargs.X - 50, drgargs.Y - 50, 50, 50);
this.Invalidate(toInvalidate);

Это сделало бы недействительной область 50 пикселей вокруг области, в которой находится цель перетаскивания.

4
ответ дан 7 December 2019 в 10:06
поделиться

Здесь есть три, казалось бы, применимых метода:

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

Control.Update () - заставляет элемент управления немедленно перерисовываться, если какие-либо части были недействителен.

Control.Refresh () - вызывает аннулирование элемента управления, а затем обновление (немедленно перерисовать себя).

Итак, Refresh () - правильный подход. Что бы я сделал, так это установил точку останова при вызове метода обновления и посмотрел, попал ли он / когда он был достигнут.

2
ответ дан 7 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: