For lige at prøve at forklare hvad Controls er vil jeg lige liste nogle af dem op du nok bruger ofte...
System.Windows.Forms.Form
System.Windows.Forms.Buttom
System.Windows.Forms.TextBox
De har alle et eller andet sted i deres arveheraki System.Windows.Forms.Control.
Her er så lige et par Screenshots af hvordan det kunne se ud:
http://dotjem.com/GridControlA.pnghttp://dotjem.com/GridControlB.pngDet der kan være lidt smart, er at som du kan se bruger jeg den GridControl klasse på samme måde som med andre Controls, ved simpel Drag & Drop ind på min form...
Der kan jeg placere den hvor jeg vil, sætte størelsen på den, sætte hvor meget der skal være mellem hver linie i mit grid og en del andre ting...
For at oprette en ny Control i fx Visual Studio 2005 kan du gøre følgende:
1. Højreklik på dit projekt i din Solution Explorer
2. Vælg Add -> New Item
3. Find den template der heder "Custom Control"
Eller
1. Klik på Project i menulinien
2. Vælg Add new item
3. Find den template der heder "Custom Control"
Så giver den dig automatisk basisen for din nye Control... Dvs OnPaint metoden ect.
Her er igen lidt nyt kode... som gør lidt ala det deu vil i det nye spm.
-------------------------------------------------------------------------------------
GridControl.cs
-------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace ChrExcample
{
public partial class GridControl : Control
{
private int spacer;
private List<Rectangle> active;
public int Spacer
{
get { return spacer; }
set { spacer = value; }
}
public GridControl()
{
InitializeComponent();
this.SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
this.active = new List<Rectangle>();
this.spacer = 10;
}
protected override void OnPaint(PaintEventArgs pe)
{
Graphics g = pe.Graphics;
using (Pen pBlack = new Pen(Color.FromArgb(0, 0, 0), 1))
{
pBlack.DashStyle = DashStyle.Dot;
for (int i = 0; i < (int)this.Height / this.spacer; i++)
g.DrawLine(pBlack, new Point(0, (i * spacer) + spacer), new Point(this.Width, (i * spacer) + spacer));
for (int i = 0; i < (int)this.Width / this.spacer; i++)
g.DrawLine(pBlack, new Point((i * spacer) + spacer, 0), new Point((i * spacer) + spacer, this.Height));
pBlack.DashStyle = DashStyle.Solid;
g.DrawRectangle(pBlack, new Rectangle(new Point(0, 0), new Size(this.Width-1,this.Height-1)));
}
using (SolidBrush sbRed = new SolidBrush(Color.Red))
{
foreach (Rectangle r in active)
{
g.FillRectangle(sbRed, r);
}
}
base.OnPaint(pe);
}
private bool mouseDown;
private void GridControl_MouseDown(object sender, MouseEventArgs e)
{
this.mouseDown = true;
}
private void GridControl_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
Rectangle r = new Rectangle();
r.X = ((e.X / this.spacer) * this.spacer) + 1;
r.Y = ((e.Y / this.spacer) * this.spacer) + 1;
r.Size = new Size(spacer - 1, spacer - 1);
if (!this.active.Contains(r))
{
this.active.Add(r);
this.Refresh();
}
}
}
private void GridControl_MouseUp(object sender, MouseEventArgs e)
{
this.mouseDown = false;
}
}
}
-------------------------------------------------------------------------------------
GridControl.Designer.cs
-------------------------------------------------------------------------------------
namespace ChrExcample
{
partial class GridControl
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// GridControl
//
this.Size = new System.Drawing.Size(100, 100);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.GridControl_MouseDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.GridControl_MouseMove);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GridControl_MouseUp);
this.ResumeLayout(false);
}
#endregion
}
}
-------------------------------------------------------------------------------------
Ja det var så et forsøg på at få dig til at forstå konceptet i en Control lidt bedre... Det resultere i at du tegner dig ud af din opgave, dvs at du tegner alle linierne i dit grid, du tegener kasserne og rammen og hvad du ellers kunne finde på...
Du kan have billeder som baggrund, eller en specifik bagrundsfarve, linierne og kasserne kan også farves som du lyster... og en hel del mere...