Как реализовать тот же эффект шатров в winform?

Функция проверки, которую вы передаете на state.contacts.find, должна возвращать логическое значение. Вы просто сравниваете element.id == id, но ничего не возвращаете.

Итак, измените его на:

export const contacts_getPersonById = state => id => {
  return state.contacts.find(element => {
    return element.id == id;
  });

};

или просто

export const contacts_getPersonById = state => id => {
  return state.contacts.find(element => element.id == id);
};
1
задан Reza Aghaei 10 February 2019 в 05:16
поделиться

1 ответ

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

Пример

В следующем примере я создал элемент управления MarqueeLabel, который анимирует текст по вертикали:

using System;
using System.Drawing;
using System.Windows.Forms;
public class MarqueeLabel : Label
{
    Timer timer;
    public MarqueeLabel()
    {
        DoubleBuffered = true;
        timer = new Timer();
        timer.Interval = 100;
        timer.Enabled = true;
        timer.Tick += Timer_Tick;
    }
    int? top;
    int textHeight = 0;
    private void Timer_Tick(object sender, EventArgs e)
    {
        top -= 3;
        if (top < -textHeight)
            top = Height;
        Invalidate();
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(BackColor);
        var s = TextRenderer.MeasureText(Text, Font, new Size(Width, 0),
            TextFormatFlags.TextBoxControl | TextFormatFlags.WordBreak);
        textHeight = s.Height;
        if (!top.HasValue) top = Height;
        TextRenderer.DrawText(e.Graphics, Text, Font,
            new Rectangle(0, top.Value, Width, textHeight),
            ForeColor, BackColor, TextFormatFlags.TextBoxControl |
            TextFormatFlags.WordBreak);
    }
    protected override void Dispose(bool disposing)
    {
        if (disposing)
            timer.Dispose();
        base.Dispose(disposing);
    }
}
0
ответ дан Reza Aghaei 10 February 2019 в 05:16
поделиться
Другие вопросы по тегам:

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