Ruler.vb
上传用户:szledliu
上传日期:2021-01-29
资源大小:13805k
文件大小:6k
源码类别:

C#编程

开发平台:

C#

  1. 'Ruler User Control
  2. 'Copyright 2007 - Thomas Maxwell
  3. 'Code for the ruler may not be redistributed without consent of the author (me)
  4. 'or without leaving this notice intact.
  5. Imports System.Drawing
  6. Imports System.ComponentModel
  7. Public Class Ruler
  8.     Private _LineSize As Integer = 2
  9.     Private _TickStep As Integer = 3
  10.     Private _DrawMode As DrawModes
  11.     Private _DrawBorder As Boolean = True
  12.     Private _DrawLabel As Boolean = False
  13.     Private _Pen As Color = Color.Black
  14.     Enum DrawModes
  15.         TopOnly
  16.         BottomOnly
  17.         TopAndBottom
  18.     End Enum
  19.     Enum LineSizes
  20.         None = 0
  21.         Thin = 1
  22.         Small = 2
  23.         Medium = 3
  24.         Large = 4
  25.         Largest = 5
  26.     End Enum
  27.     <Browsable(True), DefaultValue(DrawModes.TopOnly), _
  28.      Category("Appearance"), Description("Sets the mode the cotrol draws in")> _
  29.     Public Property DrawMode() As DrawModes
  30.         Get
  31.             Return _DrawMode
  32.         End Get
  33.         Set(ByVal Value As DrawModes)
  34.             _DrawMode = Value
  35.             Me.Refresh()
  36.         End Set
  37.     End Property
  38.     <Browsable(True), Category("Appearance"), DefaultValue(3), Description("Small Tick Frequency")> _
  39.     Public Property TickStep() As Integer
  40.         Get
  41.             Return _TickStep
  42.         End Get
  43.         Set(ByVal Value As Integer)
  44.             If Value > 5 Or Value < 0 Then
  45.                 MessageBox.Show("Tick step muct be between 0 and 5", "Invalid Number" _
  46.                 , MessageBoxButtons.OK, MessageBoxIcon.Information)
  47.                 _TickStep = 1
  48.             Else
  49.                 _TickStep = Value
  50.             End If
  51.             Me.Refresh()
  52.         End Set
  53.     End Property
  54.     <Browsable(True), DefaultValue(True), Description("Determines if control draws a border."), _
  55.     Category("Appearance")> Public Property ShowBorder() As Boolean
  56.         Get
  57.             Return _DrawBorder
  58.         End Get
  59.         Set(ByVal Value As Boolean)
  60.             _DrawBorder = Value
  61.             Me.Refresh()
  62.         End Set
  63.     End Property
  64.     <Browsable(True), DefaultValue(True), Category("Appearance"), _
  65.     Description("Determines whether the control will draw labels")> _
  66.     Public Property DrawLabels() As Boolean
  67.         Get
  68.             Return _DrawLabel
  69.         End Get
  70.         Set(ByVal Value As Boolean)
  71.             _DrawLabel = Value
  72.             Me.Refresh()
  73.         End Set
  74.     End Property
  75.     <Browsable(True), DefaultValue(True), Category("Appearance"), _
  76.     Description("Determines color of the ticks")> _
  77.     Public Property PenColor() As Color
  78.         Get
  79.             Return _Pen
  80.         End Get
  81.         Set(ByVal value As Color)
  82.             _Pen = value
  83.         End Set
  84.     End Property
  85.     Private Sub Ruler_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  86.     End Sub
  87.     Private Sub DrawRuler(ByVal g As Graphics, ByVal formWidth As Integer, ByVal formHeight As Integer)
  88.         ' Border
  89.         If ShowBorder = True Then
  90.             g.DrawRectangle(Pens.Black, 0, 0, formWidth - 1, formHeight - 1)
  91.         End If
  92.         ' Width
  93.         If DrawLabels = True Then
  94.             g.DrawString(Me.Width.ToString + " pixels", Font, Brushes.Black, 10, (Me.Height / 2) - (Font.Height / 2))
  95.         End If
  96.         ' Ticks
  97.         Dim i As Integer
  98.         For i = 0 To formWidth - 1 Step i + _TickStep
  99.             If i Mod 2 = 0 Then
  100.                 Dim tickHeight As Integer
  101.                 If i Mod 100 = 0 Then
  102.                     tickHeight = 15
  103.                     If DrawLabels = True Then
  104.                         DrawTickLabel(g, i.ToString(), i, formHeight, tickHeight)
  105.                     End If
  106.                 ElseIf i Mod 10 = 0 Then
  107.                     tickHeight = 10
  108.                 Else
  109.                     tickHeight = 5
  110.                 End If
  111.                 DrawTick(g, i, formHeight, tickHeight)
  112.             End If
  113.         Next
  114.     End Sub
  115.     Private Sub DrawTick(ByVal g As Graphics, ByVal xPos As Integer, ByVal formHeight As Integer, ByVal tickHeight As Integer)
  116.         Select Case DrawMode
  117.             Case DrawModes.BottomOnly
  118.                 g.DrawLine(New Pen(_Pen, 1), xPos, formHeight, xPos, formHeight - tickHeight)
  119.             Case DrawModes.TopOnly
  120.                 g.DrawLine(New Pen(_Pen, 1), xPos, 0, xPos, tickHeight)
  121.             Case DrawModes.TopAndBottom
  122.                 ' Top
  123.                 g.DrawLine(New Pen(_Pen, 1), xPos, 0, xPos, tickHeight)
  124.                 ' Bottom
  125.                 g.DrawLine(New Pen(_Pen, 1), xPos, formHeight, xPos, formHeight - tickHeight)
  126.         End Select
  127.     End Sub
  128.     Private Sub DrawTickLabel(ByVal g As Graphics, ByVal text As String, ByVal xPos As Integer, ByVal formHeight As Integer, ByVal height As Integer)
  129.         Select Case DrawMode
  130.             Case DrawModes.BottomOnly
  131.                 g.DrawString(text, Font, Brushes.Black, xPos - 100, formHeight - height - Font.Height)
  132.             Case DrawModes.TopOnly
  133.                 g.DrawString(text, Font, Brushes.Black, xPos - 100, height)
  134.             Case DrawModes.TopAndBottom
  135.                 ' Top
  136.                 g.DrawString(text, Font, Brushes.Black, xPos - 100, height)
  137.                 ' Bottom
  138.                 g.DrawString(text, Font, Brushes.Black, xPos - 100, formHeight - height - Font.Height)
  139.         End Select
  140.     End Sub
  141.     Private Sub Ruler_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
  142.         Dim height As Integer = Me.Height
  143.         Dim width As Integer = Me.Width
  144.         'Select Case Orientation
  145.         '    Case Orientations.Horizontal
  146.         DrawRuler(e.Graphics, width, height)
  147.     End Sub
  148. End Class