[C#] Beim hinzufügen meines Controls stürzt VS ab!

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    [C#] Beim hinzufügen meines Controls stürzt VS ab!

    Moinsen zusammen.

    Ich hab da ein kleines Problem. Nämlich stürzt ständig mein VS2010 ab, wenn ich mein eigenes Control hinzufüge. Dabei handelt es sich um einen Button. Ich kann mir nicht erklären, wieso es nicht geht! Hier mal der Code von meinem Button:

    C-Quellcode

    1. using System;
    2. using System.Drawing;
    3. using System.Drawing.Drawing2D;
    4. using System.Runtime.InteropServices;
    5. using System.Windows.Forms;
    6. namespace Projekt.Controls
    7. {
    8. class ButtonExx : Button
    9. {
    10. bool hover = false;
    11. bool pressed = false;
    12. public ButtonExx()
    13. {
    14. this.Text = "ButtonExx";
    15. }
    16. public string SubText
    17. {
    18. set
    19. {
    20. this.SubText = value;
    21. }
    22. get
    23. {
    24. return this.SubText;
    25. }
    26. }
    27. protected override void OnPaint(PaintEventArgs e)
    28. {
    29. Graphics g = e.Graphics;
    30. Rectangle rec = new Rectangle(0, 0, this.Width, this.Height);
    31. Rectangle leftrec = new Rectangle(1, 1, 50, this.Height - 2);
    32. Rectangle rightrec = new Rectangle(52, 1, this.Width - 50, this.Height - 2);
    33. Font TopTextFont = new Font(this.Font.Name, this.Font.Size);
    34. SizeF Length = g.MeasureString(this.Text, TopTextFont);
    35. Point TopTextPoi = new Point(62, Convert.ToInt32(this.Height / 2 - TopTextFont.Size));
    36. Font SubTextFont = new Font(this.Font.Name, this.Font.Size - 4);
    37. SizeF SubLength = g.MeasureString(this.Text, SubTextFont);
    38. Point SubTextPoi = new Point(62, Convert.ToInt32(this.Height / 2 + 4));
    39. LinearGradientBrush background = new LinearGradientBrush(new Point(0, 0), new Point(0, this.Height), Color.FromArgb(145, 149, 161), Color.FromArgb(105, 113, 116));
    40. LinearGradientBrush linear = new LinearGradientBrush(new Point(0, 0), new Point(0, this.Height), Color.FromArgb(254, 250, 230), Color.FromArgb(254, 252, 233));
    41. g.FillRectangle(background, rec);
    42. g.FillRectangle(linear, leftrec);
    43. g.FillRectangle(linear, rightrec);
    44. g.DrawString(this.Text, TopTextFont, new SolidBrush(Color.FromArgb(30, 30, 30)), TopTextPoi);
    45. }
    46. }
    47. }


    Weiß einer von euch Rat. Mach ich irgendwas falsch?
    Gruß, Marin
    Hi
    LinearGradientBrush schmeißt eine Exception, wenn Höhe oder Beite 0 sind. Das Control wird aber bereits mit dieser Größe gezeichnet.
    Übrigens gibt dir ClientRectangle genau das Rectangle rec an. Es ist mMn besser, wenn man bei Größen nicht mit - und + agiert, sondern Multiplikationen verwendet. Was passiert z.B., wenn man einen Font verwenden möchte, der eine kleinere Em-Größe hat, als 4.0f? Was ist mit Controls, deren Breite <= 50 px beträgt?

    Übrigens haben Fonts auch einen Konstruktor, der eine FontFamily entgegennimmt. Ich denke mal, das dürfte effizienter sein, als nach Fonts per Name zu suchen.

    Gruß
    ~blaze~