Laden...

ProgressBox-Control / WaterBox-Control

Letzter Beitrag vor 17 Jahren 33 Posts 20.249 Views
ProgressBox-Control / WaterBox-Control

Hallo Commuinty.

Im Moment bin ich dabei, eine dreidimensionale ProgressBox zu basteln.
Vorstellen muss man sich darunter eine Art Glaskasten, der je nach Prozentzahl mit wasser gefüllt ist. Wie bei Winrar die Kompressionsanzeige mit dem Sand.

Geben wird es das viereckig und rund mit Farbverlauf.

Desweiteren kann man den Status selber ändern (Draggable).

Nur die Frage ist, ob jemand Interresse an dem Control hat. dann werde ich es nähmlich fertigstellen und veröffentlichen.

Hoffe auf Feedback.

[EDIT]Wenns Probleme mit der DLL gibt einfach die Source nehmen und selber übersetzen: ProgressBox-Control[/EDIT]

interessant wäre es sicherlich.

lg Dennis

Jap, hat jemand

btw. super Idee 😉

Sowas würd mich interesieren.

ja...ich bin SEHR interessiert.

ProgHopst

So siehts aus, bis jetzt.

Ales individuell einstellbar.

Sry for bad quality 😁

Für übersichtliche Statusabfragen, bei denen ein ungefährer Wert reicht, ist dieses Control mit Sicherhheit äußerst praktisch. Doch es wäre trotzdem angenehm, wenn man bei Bedarf eine Skala einblenden könnte.

MfG,
Grouser.

Kann ich ja noch proggen. Wird aber äußerst schwierig mit dem Zylinder.

// Yo, mit scala

So jungens!

Das ist feddich, außer das man nichts ziehen kann.

Demoprojekt angehängt.

Hinweis: Das ist "nur" ein Demo-Programm. Das eigentliche Control findet ihr im ersten Beitrag ganz oben.

Hi v.wochnik,
das Projekt sieht ja schon ganz nett aus, doch eins fällt negativ auf:
Obwohl sich die Skala augenscheinlich auf der Rückseite der Behälter befindet, ist sie auch "vor" der Flüssigkeit abzulesen. Dies sorgt zusammen mit der räumlichen Perspektive für einen Widerspruch. Die Flüssigkeit scheint die Skala zu verschieben.

MfG,
Grouser.

Ach! nein.

Das stimmt soo nicht.

Denn die Flüssigkeit ist ein Color, der NICHT transparent ist.

Deshalb dachte ich mir, dass man die Flüssigkeitsskala im Bereich der Flüssigke8it vorne platzieren könnte.

// Soooo das draggable feature.

da! funktioniert.

Hinweis: Das ist "nur" ein Demo-Programm. Das eigentliche Control findet ihr im ersten Beitrag ganz oben.

Hallo v.wochnik,

das sorgt aber - wie du siehst - für Verwirrungen. Ich denke es ist besser, entweder die Skala immer vorne zu zeichnen oder die Flüssigkeit auch "transparent" zu machen und die Skala immer hinten zu zeichnen.

Denn bei einem realen Gefäß, wandert die Skala durch das Einfüllen einer Flüssigkeit ja auch nicht von hinten nach vorne. 🙂

herbivore

das stimmt 🙂

werde ich heute nach der Arbeit verbessern.

noch features erwünscht? posten!!!

Erst einaml muss ich sagen, dass das eine feine Sache ist.
Und dann muss ich fragen: Kann man den Glaskasten auch horizontal darstellen und befüllen lassen? Also eine Art 3D-ProgressBar.

finde das control auch ganz gut. vor allem: schön gezeichnet finde ich.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

horizontal: nein, wird auch nicht implementiert, da das Ganze auf vertikalen berechnungen basiert.

Was du aber machen könntest ist, den Control unabhängig vom Form mit new ProgressBox() zu erstellen und dann das Gezeichnete rauskopieren und um 90 grad drehen und dann wegen des Lichtes wegen noch vertikal spiegeln.

Super Idee!

Hallo,

sieht irre gut aus!

Das kann ich gut für eine Temperatur-Steuerung gebrauchen (als Thermometer).

Christoph

Genaue "Füllstandsanzeige"

Dass mit den Linien als Skala, finde ich gut. Dort kann man schon ungefähr abschätzen, wie viel Flüssigkeit im Behälter vorhanden ist. Für eine genauere Angabe könnte man dann entweder mittels Tool-Tip beim Überfahren des Controls den genauen Stand anzeigen oder wenn man die linke Maustaste drückt, um die Anzeige zu verändern.

Christoph

Wird das Control auch veröffentlicht oder hast du die Arbeit eingestellt?
Wäre über eine Statusmeldung sehr erfreut.

Hallo Froggie,

das Control ist ja veröffentlicht, siehe weiter oben, also bei ProgressBox-Control . Lieder eben nur als EXE und nicht als DLL.

Hallo v.wochnik,

könntest du das bitte noch ändern und dass Control nicht als exe, sondern als DLL anbieten. Vielen Dank!

herbivore

Jabe ich geändert

Hallo,

ich habe Probleme das Control zu benutzen, VS sagt mir jedesmal dass es keine Controls in der DLL finden kann, wie soll das gehen?

Danke,
christian

Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen

da viele Leute probleme mit der DLL haben, die offenbar nicht funzt, veröffentliche ich hier mein source.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace ShareWatcher.Controls
{
    class ProgressBox : Control
    {
        #region ProgressBoxStyle enum
        /// <summary>
        /// Contains the style enumeration.
        /// </summary>
        public enum ProgressBoxStyle
        {
            Cube,
            Cylinder
        }
        #endregion

        public event EventHandler ValueChanged;

        #region Members
        #region FreeColor
        private Color m_freeColor = Color.FromArgb(127, 173, 216, 230);

        [Category("Appearance"), DefaultValue(typeof(Color), "127; 173; 216; 230")]
        public Color FreeColor
        {
            get
            {
                return m_freeColor;
            }
            set
            {
                if (m_freeColor != value)
                {
                    m_freeColor = value;
                    Invalidate();
                }
            }
        }
        #endregion
        #region FillColor
        private Color m_fillColor = Color.FromArgb(192, 70, 130, 180);

        [Category("Appearance"), DefaultValue(typeof(Color), "192; 70; 130; 180")]
        public Color FillColor
        {
            get
            {
                return m_fillColor;
            }
            set
            {
                if (m_fillColor != value)
                {
                    m_fillColor = value;
                    Invalidate();
                }
            }
        }
        #endregion
        #region ScalaColor
        private Color m_scalaColor = Color.Gray;

        [Category("Appearance"), DefaultValue(typeof(Color), "Gray")]
        public Color ScalaColor
        {
            get
            {
                return m_scalaColor;
            }
            set
            {
                if (m_scalaColor != value)
                {
                    m_scalaColor = value;
                    Invalidate();
                }
            }
        }
        #endregion
        #region BorderColor
        private Color m_borderColor = Color.Black;

        [Category("Appearance"), DefaultValue(typeof(Color), "Black")]
        public Color BorderColor
        {
            get
            {
                return m_borderColor;
            }
            set
            {
                if (m_borderColor != value)
                {
                    m_borderColor = value;
                    Invalidate();
                }
            }
        }
        #endregion
        #region BorderWidth
        private float m_borderWidth = 1;

        [Category("Appearance"), DefaultValue(1)]
        public float BorderWidth
        {
            get
            {
                return m_borderWidth;
            }
            set
            {
                if (m_borderWidth != value)
                {
                    m_borderWidth = value;
                    Invalidate();
                }
            }
        }
        #endregion
        #region Ratio
        private double m_ratio = 0.5;

        [Category("Appearance"), DefaultValue(0.5)]
        public double Ratio
        {
            get
            {
                return m_ratio;
            }
            set
            {
                if (m_ratio != value)
                {
                    m_ratio = Math.Min(Math.Max(value, 0.1), 1);
                    Invalidate();
                }
            }
        }
        #endregion
        #region Draggable
        private bool m_draggable = false;

        [Category("Appearance"), DefaultValue(false)]
        public bool Draggable
        {
            get
            {
                return m_draggable;
            }
            set
            {
                if (m_draggable != value)
                {
                    m_draggable = value;
                }
            }
        }
        #endregion
        #region Value
        private int m_value;

        [Category("Appearance"), DefaultValue(0)]
        public int Value
        {
            get
            {
                return m_value;
            }
            set
            {
                if (m_value != value)
                {
                    m_value = Math.Min(Math.Max(value, 0), 100);
                    Invalidate();
                    OnValueChanged(EventArgs.Empty);
                }
            }
        }
        #endregion
        #region Contrast
        private int m_contrast = 32;

        [Category("Appearance"), DefaultValue(32)]
        public int Contrast
        {
            get
            {
                return m_contrast;
            }
            set
            {
                if (m_contrast != value)
                {
                    m_contrast = Math.Min(Math.Max(value, 0), 128);
                    Invalidate();
                }
            }
        }
        #endregion
        #region Scala
        private int m_scala = 20;

        [Category("Appearance"), DefaultValue(20)]
        public int Scala
        {
            get
            {
                return m_scala;
            }
            set
            {
                if (m_scala != value)
                {
                    m_scala = Math.Min(Math.Max(value, 0), 100);
                    Invalidate();
                }
            }
        }
        #endregion
        #region Style
        private ProgressBoxStyle m_style = ProgressBoxStyle.Cube;

        [Category("Appearance"), DefaultValue(typeof(ProgressBoxStyle), "Cube")]
        public ProgressBoxStyle Style
        {
            get
            {
                return m_style;
            }
            set
            {
                if (m_style != value)
                {
                    m_style = value;
                    Invalidate();
                }
            }
        }
        #endregion
        #region ShowPercentage
        private bool m_showPercentage = false;

        [Category("Appearance"), DefaultValue(false)]
        public bool ShowPercentage
        {
            get
            {
                return m_showPercentage;
            }
            set
            {
                if (m_showPercentage != value)
                {
                    m_showPercentage = value;
                    Invalidate();
                }
            }
        }
        #endregion

        #region Offset
        private float Offset
        {
            get
            {
                return (float)((double)Bounding.Width / 2.0 * Ratio);
            }
        }
        #endregion
        #region Bounding
        private RectangleF Bounding
        {
            get
            {
                return new RectangleF(BorderWidth, BorderWidth, Width - BorderWidth * 2, Height - BorderWidth * 2);
            }
        }
        #endregion

        #region FreeColorDark
        private Color FreeColorDark
        {
            get
            {
                int light = -(int)((double)Contrast / 2.0);
                return Color.FromArgb(FreeColor.A,
                    Math.Min(Math.Max(FreeColor.R + light, 0), 255),
                    Math.Min(Math.Max(FreeColor.G + light, 0), 255),
                    Math.Min(Math.Max(FreeColor.B + light, 0), 255));
            }
        }
        #endregion
        #region FreeColorLight
        private Color FreeColorLight
        {
            get
            {
                int light = (int)((double)Contrast / 2.0);
                return Color.FromArgb(FreeColor.A,
                    Math.Min(Math.Max(FreeColor.R + light, 0), 255),
                    Math.Min(Math.Max(FreeColor.G + light, 0), 255),
                    Math.Min(Math.Max(FreeColor.B + light, 0), 255));
            }
        }
        #endregion
        #region FillColorDark
        private Color FillColorDark
        {
            get
            {
                int light = -(int)((double)Contrast / 2.0);
                return Color.FromArgb(FillColor.A,
                    Math.Min(Math.Max(FillColor.R + light, 0), 255),
                    Math.Min(Math.Max(FillColor.G + light, 0), 255),
                    Math.Min(Math.Max(FillColor.B + light, 0), 255));
            }
        }
        #endregion
        #region FillColorLight
        private Color FillColorLight
        {
            get
            {
                int light = (int)((double)Contrast / 2.0);
                return Color.FromArgb(FillColor.A,
                    Math.Min(Math.Max(FillColor.R + light, 0), 255),
                    Math.Min(Math.Max(FillColor.G + light, 0), 255),
                    Math.Min(Math.Max(FillColor.B + light, 0), 255));
            }
        }
        #endregion
        #endregion

        public ProgressBox()
        {
            DoubleBuffered = true;
            Width = 70;
            Height = 150;
        }

        protected void OnValueChanged(EventArgs e)
        {
            if (ValueChanged != null)
                ValueChanged(this, e);
        }

        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (Draggable)
            {
                switch (Style)
                {
                    case ProgressBoxStyle.Cube:
                        DragCube(e.X, e.Y);
                        break;
                    case ProgressBoxStyle.Cylinder:
                        DragCylinder(e.X, e.Y);
                        break;
                }
            }
            base.OnMouseDown(e);
        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            if ((Draggable) && ((e.Button & MouseButtons.Left) == MouseButtons.Left))
            {
                switch (Style)
                {
                    case ProgressBoxStyle.Cube:
                        DragCube(e.X, e.Y);
                        break;
                    case ProgressBoxStyle.Cylinder:
                        DragCylinder(e.X, e.Y);
                        break;
                }
            }
            base.OnMouseMove(e);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.SmoothingMode = SmoothingMode.HighQuality;

            switch (Style)
            {
                case ProgressBoxStyle.Cube:
                    DrawCube(g);
                    break;
                case ProgressBoxStyle.Cylinder:
                    DrawCylinder(g);
                    break;
            }

            if (ShowPercentage)
            {
                string str = Value.ToString() + "%";

                SizeF size = g.MeasureString(str, Font);

                RectangleF placement = new RectangleF(
                    Bounding.X + Bounding.Width / 2F - size.Width / 2F,
                    Bounding.Y + Offset - size.Height / 2F,
                    size.Width,
                    size.Height);

                g.DrawString(str, Font, new SolidBrush(ForeColor), placement);
            }
        }

        private float GetPercentageHeight(double v)
        {
            return Bounding.Bottom - Offset - (float)(v * (Bounding.Height - Offset * 2));
        }

        #region DrawCube
        private void DrawCube(Graphics g)
        {
            DrawFloorCube(g, 0, FreeColor);
            DrawWallCube(g, 0, 1, false);
            DrawScalaCube(g, 0, 1, false);
            if (Value > 0)
            {
                DrawWallCube(g, 0, (double)Value / 100.0, true);
                DrawFloorCube(g, (double)Value / 100.0, FillColor);
            }
            DrawFloorCube(g, 1, FreeColor);

            g.DrawLine(new Pen(BorderColor, BorderWidth), Bounding.X + Bounding.Width / 2F, GetPercentageHeight(0) + Offset, Bounding.X + Bounding.Width / 2F, GetPercentageHeight(1) + Offset);
        }
        #endregion
        #region DrawCylinder
        private void DrawCylinder(Graphics g)
        {
            DrawFloorCylinder(g, 0, FreeColor);
            DrawWallCylinder(g, 0, 1, false);
            DrawScalaCylinder(g, 0, 1, false);
            if (Value > 0)
            {
                DrawWallCylinder(g, 0, (double)Value / 100.0, true);
                DrawFloorCylinder(g, (double)Value / 100.0, FillColor);
            }
            DrawFloorCylinder(g, 1, FreeColor);
        }
        #endregion

        #region DrawFloorCube
        private void DrawFloorCube(Graphics g, double v, Color c)
        {
            Pen pen = new Pen(BorderColor, BorderWidth);
            Brush brush = new SolidBrush(c);
            RectangleF rect = new RectangleF(Bounding.X, GetPercentageHeight(v) - Offset, Bounding.Width, Offset * 2);

            GraphicsPath path = new GraphicsPath();
            path.AddLine(rect.X, rect.Y + rect.Height / 2F, rect.X + rect.Width / 2F, rect.Y);
            path.AddLine(rect.X + rect.Width / 2F, rect.Y, rect.X + rect.Width, rect.Y + rect.Height / 2F);
            path.AddLine(rect.X + rect.Width, rect.Y + rect.Height / 2F, rect.X + rect.Width / 2F, rect.Y + rect.Height);
            path.AddLine(rect.X + rect.Width / 2F, rect.Y + rect.Height, rect.X, rect.Y + rect.Height / 2F);

            // Draw bottom
            g.FillPath(brush, path);

            // Draw border
            Matrix matrix = new Matrix();
            matrix.Translate(-0.5F, -0.5F);
            path.Transform(matrix);
            g.DrawPath(pen, path);
        }
        #endregion
        #region DrawFloorCylinder
        private void DrawFloorCylinder(Graphics g, double v, Color c)
        {
            Pen pen = new Pen(BorderColor, BorderWidth);
            Brush brush = new SolidBrush(c);
            RectangleF rect = new RectangleF(Bounding.X, GetPercentageHeight(v) - Offset, Bounding.Width, Offset * 2);

            // Draw bottom
            g.FillEllipse(brush, rect);

            // Draw border
            rect.Offset(-0.5F, -0.5F);
            g.DrawEllipse(pen, rect);
        }
        #endregion

        #region DrawWallCube
        private void DrawWallCube(Graphics g, double v, double vt, bool fore)
        {
            Pen pen = new Pen(BorderColor, BorderWidth);

            RectangleF vRect = new RectangleF(Bounding.X, GetPercentageHeight(v) - Offset, Bounding.Width, Offset * 2);
            RectangleF vtRect = new RectangleF(Bounding.X, GetPercentageHeight(vt) - Offset, Bounding.Width, Offset * 2);

            RectangleF rect1 = new RectangleF(Bounding.X, Bounding.Y, Bounding.Width / 2F, Bounding.Height);
            RectangleF rect2 = new RectangleF(rect1.X + rect1.Width, rect1.Y, rect1.Width, rect1.Height);

            Brush brush1 = new SolidBrush((fore) ? FillColorDark : FreeColorLight);
            Brush brush2 = new SolidBrush((fore) ? FillColorLight : FreeColorDark);

            GraphicsPath path = new GraphicsPath();
            path.AddLine(vtRect.X, vtRect.Y + vtRect.Height / 2F, vtRect.X + vtRect.Width / 2F, (fore) ? vtRect.Y : vtRect.Y + vtRect.Height);
            path.AddLine(vtRect.X + vtRect.Width / 2F, (fore) ? vtRect.Y : vtRect.Y + vtRect.Height, vtRect.X + vtRect.Width, vtRect.Y + vtRect.Height / 2F);
            path.AddLine(vRect.X + vRect.Width, vRect.Y + vRect.Height / 2F, vRect.X + vRect.Width / 2F, (fore) ? vRect.Y + vRect.Height : vRect.Y);
            path.AddLine(vRect.X + vRect.Width / 2F, (fore) ? vRect.Y + vRect.Height : vRect.Y, vRect.X, vRect.Y + vRect.Height / 2F);
            path.CloseFigure();

            // Draw wall
            g.SetClip(path);
            g.FillRectangle(brush1, rect1);
            g.FillRectangle(brush2, rect2);
            g.ResetClip();

            // Draw border
            Matrix matrix = new Matrix();
            matrix.Translate(-0.5F, -0.5F);
            path.Transform(matrix);

            g.DrawPath(pen, path);
        }
        #endregion
        #region DrawWallCylinder
        private void DrawWallCylinder(Graphics g, double v, double vt, bool fore)
        {
            Pen pen = new Pen(BorderColor, BorderWidth);

            RectangleF vRect = new RectangleF(Bounding.X, GetPercentageHeight(v) - Offset, Bounding.Width, Offset * 2);
            RectangleF vtRect = new RectangleF(Bounding.X, GetPercentageHeight(vt) - Offset, Bounding.Width, Offset * 2);

            RectangleF rect1 = new RectangleF(Bounding.X, Bounding.Y, Bounding.Width / 2F, Bounding.Height);
            RectangleF rect2 = new RectangleF(rect1.X+rect1.Width, rect1.Y, rect1.Width, rect1.Height);

            Brush brush1 = new LinearGradientBrush(rect1, (fore) ? FillColorDark : FreeColorLight, (fore) ? FillColorLight : FreeColorDark, 0F);
            Brush brush2 = new LinearGradientBrush(rect2, (fore) ? FillColorDark : FreeColorLight, (fore) ? FillColorLight : FreeColorDark, 180F);

            GraphicsPath path = new GraphicsPath();
            path.AddArc(vtRect, 180, (fore) ? -180 : 180);
            path.AddArc(vRect, 0, (fore) ? 180 : -180);
            path.CloseFigure();

            // Draw wall
            g.SetClip(path);
            g.FillRectangle(brush1, rect1);
            g.FillRectangle(brush2, rect2);
            g.ResetClip();

            // Draw border
            Matrix matrix = new Matrix();
            matrix.Translate(-0.5F, -0.5F);
            path.Transform(matrix);

            g.DrawPath(pen, path);
        }
        #endregion

        #region DrawScalaCube
        private void DrawScalaCube(Graphics g, double v, double vt, bool fore)
        {
            if (Scala == 0)
                return;

            Pen pen = new Pen(ScalaColor, BorderWidth);
            float sub = (1F - (float)(Scala / 100.0)) / 2F;

            for (double d = v; d <= vt; d += 0.1)
            {
                RectangleF rect = new RectangleF(Bounding.X, GetPercentageHeight(d) - Offset, Bounding.Width, Offset * 2);

                GraphicsPath path = new GraphicsPath();
                if (fore)
                {
                    path.AddLine(rect.X + rect.Width * sub, rect.Y + rect.Height / 2F + rect.Height * sub, rect.X + rect.Width / 2F, rect.Y + rect.Height);
                    path.AddLine(rect.X + rect.Width / 2F, rect.Y + rect.Height, rect.X + rect.Width - rect.Width * sub, rect.Y + rect.Height / 2F + rect.Height * sub);
                }
                else
                {
                    path.AddLine(rect.X + rect.Width * sub, rect.Y + rect.Height / 2F - rect.Height * sub, rect.X + rect.Width / 2F, rect.Y);
                    path.AddLine(rect.X + rect.Width / 2F, rect.Y, rect.X + rect.Width - rect.Width * sub, rect.Y + rect.Height / 2F - rect.Height * sub);
                }

                Matrix matrix = new Matrix();
                matrix.Translate(-0.5F, -0.5F);
                path.Transform(matrix);
                g.DrawPath(pen, path);
            }
        }
        #endregion
        #region DrawScalaCylinder
        private void DrawScalaCylinder(Graphics g, double v, double vt, bool fore)
        {
            if (Scala == 0)
                return;

            Pen pen = new Pen(ScalaColor, BorderWidth);

            float sweep = (float)(Scala / 100.0) * 180F;

            for (double d = v; d <= vt; d += 0.1)
            {
                RectangleF rect = new RectangleF(Bounding.X, GetPercentageHeight(d) - Offset, Bounding.Width, Offset * 2);

                // Draw border
                rect.Offset(-0.5F, -0.5F);
                g.DrawArc(pen, rect, (fore) ? 90 - sweep/2F : 270 - sweep/2F, sweep);
            }
        }
        #endregion

        #region DragCube
        private void DragCube(float x, float y)
        {
            double side = (x - (Bounding.Width / 2F)) / (Bounding.Width / 2F);
            side = Math.Max(Math.Min(side, 1), -1);

            double percentage = 1 - (y - Offset) / (Bounding.Height - Offset * 2);

            percentage -= (Math.Abs(side) * Offset - Offset) / (Bounding.Height - Offset * 2);

            Value = (int)(percentage * 100);
        }
        #endregion
        #region DragCylinder
        private void DragCylinder(float x, float y)
        {
            double side = (x - (Bounding.Width / 2F)) / (Bounding.Width / 2F);
            side = Math.Max(Math.Min(side, 1), -1);

            double percentage = 1 - (y - Offset) / (Bounding.Height - Offset * 2);

            percentage -= Math.Cos(-Math.PI + side * (Math.PI / 2)) * Offset / (Bounding.Height - Offset * 2);

            Value = (int)(percentage * 100);
        }
        #endregion
    }
}

cu.

könntest du den Source bitte als .cs Datei anhängen? Das Rauskopieren ist nervig.

könntest du den Source bitte als .cs Datei anhängen? Das Rauskopieren ist nervig.

kleingeschnitten und vorgekaut auch ? 🙂

sei doch nicht so faul
War sicher mehr als genug arbeit für Ihn das ganze zu schreiben 🙂

Hallo MagicAndre1981,

kleingeschnitten und vorgekaut auch ? 🙂

das muss ich auch sagen, zumal der Sourcecode, wenn er als Text eingefügt ist, der Volltextsuche zugänglich ist, was i.d.R. durchaus ein Vorteil ist. Und den Code alternativ auf beide Arten zur Verfügung zu stellen, verursacht nur unnötige Inkonsistenzen, wenn bei einer Aktualisierung eine Stelle vergessen wird zu ändern.

Hallo v.wochnik,

so wie es jetzt ist, ist es gut. Vielen Dank!

herbivore

Control: WaterBox

Guten Tag.

Ich habe mich entschlossen, ein neues Control zu schreiben.
Es sieht genauso aus, wie ProgressBoxControl, aber besser gezeichnet und kommentiert.

http://dotnet-snippets.de/dns/waterbox-SID737.aspx

Danke.

Sieht echt gut aus 👍

Bewertet es doch mal.
natürlich auf .net-snippets.de, damit die leute es dort auch sehen.

gibts denn was auszusetzen? irgendwas? seht euch mal den code an.

Was sagt ihr, im Vergleich zu der Konkurrenz dort?

Bewerten? wie wärs mal mit einem Screen? 🙂 Dan sieht man wenigstens das Control ohne den Source runterzuladen.. ein Projekt zu machen, den Code einbinden und starten 🙂 Also zeig mal was her.

lg Lion

lg Lion

Auf dotnet-snippets.de ist ein Wettbewerb. Darum möchte ich euch bitten, auf dieser Seite für mein Control zu voten. Das ist alles. Wenn ihr noch extra-wünsche habt, oder der Code fehler aufweist, lasst es mich wissen.

Schaut genial aus - werde das mal testen und anschliessend hier posten. Voten werde ich natürlich auch 😉

Hallo,

Glückwunsch zu deinem 3ten Platz! 👍

lg Lion

lg Lion