I en simple windows application (C# 2005) ønsker jeg at tegne en cylinder. (både vandret og lodret). Enderne skal helst ikke være flade, men istedet en halv cirkel i hver ende.
Dette kan meget nemt løses ved, at tegne en lang firkant plus 2 cirkler i enderne. Men mit problem opstår, når jeg ønsker at styre et vandniveau i cylinderen, således den eksempelvis skal være halv blå, halv hvid - 50% fyldt med vand, afhængigt af hvad jeg indtaster i diverse textfelter.
Mit spørgsmål er så, hvordan kan man lave dette nemmeste/smartest?
Det nemmeste og bedste er nok at du laver en control. På den måde kan du genbruge koden der tegner vandniveauet og det er afgrænset fra resten af formen.
Et hurtigt eksempel kunne være noget som nedenstående. Hvis du smider koden ind i en fil i dit projekt (kald den f.eks. CylinderControl), så skulle den gerne dukke op som en kontrol i din toolbar når du har buildet dit projekt. Du kan bestemme hvor meget 'beholderen' skal fyldes ved at sætte FillValue - og farven ved at sætte FillColor.
--- using System; using System.Windows.Forms; using System.Drawing; using System.ComponentModel;
namespace B.Testing { public class CylinderControl : Control { private Color fillColor = Color.Blue; private int fillValue = 0;
[DefaultValue(typeof(Color), "Blue")] public Color FillColor { get { return fillColor; } set { if (value != fillColor) { fillColor = value; Invalidate(); OnFillColorChanged(EventArgs.Empty); } } }
[DefaultValue(0)] public int FillValue { get { return fillValue; } set { if (value < 0 || value > 100) { throw new ArgumentOutOfRangeException("value"); } if (value != fillValue) { fillValue = value; Invalidate(); OnFillValueChanged(EventArgs.Empty); } } }
Jeg synes ikke lige at kunne få det til at spille. Jeg prøver at tegne i et panel kaldet drawingPanel. Jeg har oprettet en class til dit ovenstående kode, samt ændret funktion drawcylinder til public.
Jeg gør følgende:
private void SeparatorForm_Load(object sender, EventArgs e) { // TODO: This line of code loads data into drawingPanel.Paint += new PaintEventHandler(drawingPanel_Paint);
}
private void drawingPanel_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Separator_Control dc = new Separator_Control(this); dc.DrawCylinder(g); }
Men jeg synes ikke lige den tegner som jeg gerne ville have.
Svar. men brugte du så en contrul - eller valgte du at tegne direkte i panelet?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.