Скачать плагин Glassfish Adapter отдельно

Я использовал ProgressBar Control в своем настольном приложении на c #. Я использовал его в потоке, отличном от потока, в котором был объявлен элемент управления. Работает нормально. Теперь мне интересно, как я могу показать какой-то текст в элементе управления индикатором выполнения, например «Инициирование регистрации» и т. Д. Также я хочу использовать его как индикатор выполнения Marquee. Пожалуйста, помогите мне.

41
задан Pieniadz 2 February 2012 в 02:29
поделиться

3 ответа

Я хотел бы создать элемент управления с именем, например, InfoProgresBar, который предоставляет эту функциональность с одной или двумя метками (Main Job, Current Job) и ProgressBar и использовать его вместо этого ProgressBar.

9
ответ дан 27 November 2019 в 00:18
поделиться

В качестве аллитерации вы можете попробовать разместить элемент управления Label и поместить его поверх элемента управления индикатором выполнения. Затем вы можете установить любой текст для метки. Сам я этого не делал. Если это сработает, это должно быть более простое решение, чем переопределение onpaint.

-1
ответ дан 27 November 2019 в 00:18
поделиться

Вам нужно будет переопределить метод OnPaint, вызвать базовую реализацию и нарисовать свой собственный текст.

Вам нужно будет создать свой собственный CustomProgressBar , а затем переопределить OnPaint , чтобы рисовать любой текст, который вы хотите.

Пользовательский класс индикатора выполнения

namespace ProgressBarSample
{

public enum ProgressBarDisplayText
{
    Percentage,
    CustomText
}

class CustomProgressBar: ProgressBar
{
    //Property to set to decide whether to print a % or Text
    public ProgressBarDisplayText DisplayStyle { get; set; }

    //Property to hold the custom text
    public String CustomText { get; set; }

    public CustomProgressBar()
    {
        // Modify the ControlStyles flags
        //http://msdn.microsoft.com/en-us/library/system.windows.forms.controlstyles.aspx
        SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Rectangle rect = ClientRectangle;
        Graphics g = e.Graphics;

        ProgressBarRenderer.DrawHorizontalBar(g, rect);
        rect.Inflate(-3, -3);
        if (Value > 0)
        {
            // As we doing this ourselves we need to draw the chunks on the progress bar
            Rectangle clip = new Rectangle(rect.X, rect.Y, (int)Math.Round(((float)Value / Maximum) * rect.Width), rect.Height);
            ProgressBarRenderer.DrawHorizontalChunks(g, clip);
        }

        // Set the Display text (Either a % amount or our custom text
        string text = DisplayStyle == ProgressBarDisplayText.Percentage ? Value.ToString() + '%' : CustomText;


        using (Font f = new Font(FontFamily.GenericSerif, 10))
        {

            SizeF len = g.MeasureString(text, f);
            // Calculate the location of the text (the middle of progress bar)
            // Point location = new Point(Convert.ToInt32((rect.Width / 2) - (len.Width / 2)), Convert.ToInt32((rect.Height / 2) - (len.Height / 2)));
            Point location = new Point(Convert.ToInt32((Width / 2) - len.Width / 2), Convert.ToInt32((Height / 2) - len.Height / 2)); 
            // The commented-out code will centre the text into the highlighted area only. This will centre the text regardless of the highlighted area.
            // Draw the custom text
            g.DrawString(text, f, Brushes.Red, location);
        }
    }
}
}

Пример приложения WinForms

using System;
using System.Linq;
using System.Windows.Forms;
using System.Collections.Generic;

namespace ProgressBarSample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // Set our custom Style (% or text)
            customProgressBar1.DisplayStyle = ProgressBarDisplayText.CustomText;
            customProgressBar1.CustomText = "Initialising";
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            customProgressBar1.Value = 0;
            btnStart.Enabled = true;
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            btnReset.Enabled = false;
            btnStart.Enabled = false;

            for (int i = 0; i < 101; i++)
            {

                customProgressBar1.Value = i;
                // Demo purposes only
                System.Threading.Thread.Sleep(100);

                // Set the custom text at different intervals for demo purposes
                if (i > 30 && i < 50)
                {
                    customProgressBar1.CustomText = "Registering Account";
                }

                if (i > 80)
                {
                    customProgressBar1.CustomText = "Processing almost complete!";
                }

                if (i >= 99)
                {
                    customProgressBar1.CustomText = "Complete";
                }
            }

            btnReset.Enabled = true;


        }


    }
}
62
ответ дан 27 November 2019 в 00:18
поделиться
Другие вопросы по тегам:

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