Вот адаптация решения 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. Это не только устраняет предупреждение; это также короче, более эффективно и легче читать!
Вызов this.Invalidate ()
, чтобы форма / элемент управления перерисовывались. Если вам известен конкретный регион, вызовите один из перегруженных методов, чтобы указать, что следует аннулировать. Например:
Rectangle toInvalidate = new Rectangle(drgargs.X - 50, drgargs.Y - 50, 50, 50);
this.Invalidate(toInvalidate);
Это сделало бы недействительной область 50 пикселей вокруг области, в которой находится цель перетаскивания.
Здесь есть три, казалось бы, применимых метода:
Control.Invalidate () - отмечает элемент управления (область или прямоугольник) как требующий перерисовки, но не вызывает перерисовку, перекраска запускается, когда все остальное были приняты меры, и приложение переходит в режим ожидания.
Control.Update () - заставляет элемент управления немедленно перерисовываться, если какие-либо части были недействителен.
Control.Refresh () - вызывает аннулирование элемента управления, а затем обновление (немедленно перерисовать себя).
Итак, Refresh () - правильный подход. Что бы я сделал, так это установил точку останова при вызове метода обновления и посмотрел, попал ли он / когда он был достигнут.