Простая анимация в WinForms

Вы можете агрегировать минимальную и максимальную временную отметку и сумму суммы:

from django.db.models import Min, Max, Sum

def average_spending_per_day():
    aggregate = Payment.objects.aggregate(Min('timestamp'), Max('timestamp'), Sum('amount'))
    min_datetime = aggregate.get('timestamp__min')
    if min_datetime is not None:
        min_date = min_datetime.date()
        max_date = aggregate.get('timestamp__max').date()
        total_amount = aggregate.get('amount__sum')
        days = (max_date - min_date).days + 1
        return total_amount / days
    return 0

Если есть min_datetime, то в таблице БД есть некоторые данные, а также есть максимальная дата и общее количество. сумма, в противном случае мы возвращаем 0 или что вы хотите.

21
задан Chris Smith 14 August 2008 в 16:44
поделиться

3 ответа

В некоторых ситуациях это быстрее и более удобно не привлечь использование события краски, но получение Графического объекта от управления/формы и подрисовывания это. Это может дать некоторые проблемы с искажением/текстом непрозрачности / анти-искажением/текстом и т.д., но могло стоить проблемы с точки зрения не необходимости перекрасить целую хижину. Что-то вроде:

private void AnimationTimer_Tick(object sender, EventArgs args)
{
    // First paint background, like Clear(Control.Background), or by
    // painting an image you have previously buffered that was the background.
    animationControl.CreateGraphics().DrawImage(0, 0, animationImages[animationTick++])); 
}

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

10
ответ дан 29 November 2019 в 06:35
поделиться

Я создал библиотеку, которая может помочь с этим. Она называется Transitions и может быть найдена здесь: http://code.google.com/p/dot-net-transitions/

. Для анимации используются таймеры, работающие в фоновом потоке. объекты. Библиотека с открытым исходным кодом, поэтому, если она вам пригодится, вы можете посмотреть код, чтобы увидеть, что она делает.

48
ответ дан 29 November 2019 в 06:35
поделиться

То, что Вы делаете, является единственным решением, которое я когда-либо использовал в WinForms (таймер с постоянными изменениями). Существует набор методов, которые можно использовать для создания опыта пользователя с ним более гладким (такого как двойная буферизация).

Вы могли бы хотеть дать WPF попытку. Существуют встроенные средства для того, чтобы сделать анимации в WPF, и они являются намного более гладкими (и потребуйте меньшего количества кода и никакой синхронизации с Вашей стороны), чем основанное на таймере решение.

Примечание, что Вы не должны использовать WPF всюду по своему целому приложению для того решения; возможно упаковать эту функциональность в WPF, управляют и встраивают управление в приложение WinForms (или неуправляемое приложение, в этом отношении):

http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx

4
ответ дан 29 November 2019 в 06:35
поделиться
Другие вопросы по тегам:

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