LboxEditor


  簡易エディタコントロール

※ 行番号が表示されます
※ Editor プロパティで、RichTextBox のインスタンスを取得できますので、細かい処理はそちらで行います
※ TAB および、SHIFT+TAB で一括インデントが可能になっています


  コード




  

Private rowAreaBackColor As System.Drawing.Color = Color.White
Private lineHeight As Single
Private lineX As Integer

' *******************************************************************
' 初期処理
' *******************************************************************
Private Sub RichTextBoxEx_Load(ByVal sender As Object, _
 ByVal e As System.EventArgs) Handles Me.Load

	myText.AcceptsTab = True
	myText.LanguageOption = RichTextBoxLanguageOptions.UIFonts
	myText.Text = " "
	myText.Text = ""
	lineHeight = myText.Font.GetHeight()

End Sub

' *******************************************************************
' 行の再描画
' *******************************************************************
Public Sub ResetRowArea(ByVal graphicHandle As Graphics)

	Dim rows As Integer
	Dim leftTop As Integer
	Dim topLine As Integer
	Dim endrow As Integer
	Dim loc As Point

	' 現在の最終行
	endrow = myText.GetLineFromCharIndex(myText.Text.Length)
	' 表示エリアに表示可能な行数
	rows = (myText.ClientRectangle.Height) / myText.Font.Height + 2
	' 少ないほうを採用
	If endrow < rows Then
		rows = endrow
	End If

	' 表示エリアの開始行
	leftTop = myText.GetCharIndexFromPosition(New Point(0, 0))
	topLine = myText.GetLineFromCharIndex(leftTop)

	' 行番号を描画する X 座標
	lineX = Me.rowArea.Width - graphicHandle.MeasureString("0000000", myText.Font).Width
	loc = New Point( _
	   lineX, _
	   myText.GetPositionFromCharIndex(myText.GetFirstCharIndexFromLine(topLine)).Y _
	  )

	' 行番号エリアの背景色
	graphicHandle.Clear(Me.rowAreaBackColor)

	' 行番号を描画
	For i As Integer = topLine To topLine + rows
		graphicHandle.DrawString( _
		 String.Format("{0,7}", i + 1), _
		 myText.Font, _
		 Brushes.Black, _
		 loc)
		loc.Y += lineHeight
	Next

End Sub

' *******************************************************************
' RichTextBox からのイベント
' *******************************************************************
Public Shadows Event KeyDown As EventHandler
Public Shadows Event KeyPress As EventHandler
Public Shadows Event KeyUp As EventHandler
Public Shadows Event TextChanged As EventHandler
Public Shadows Event VScroll As EventHandler
Public Shadows Event HScroll As EventHandler

' *******************************************************************
' 特殊キーの処理
' *******************************************************************
Private Sub myText_KeyDown(ByVal sender As System.Object, _
  ByVal e As System.Windows.Forms.KeyEventArgs) Handles myText.KeyDown

	If e.Control And e.KeyCode = Keys.V Then
		myText.SelectedText = Clipboard.GetText
		e.Handled = True
	End If

	If e.Shift And e.KeyCode = Keys.Insert Then
		myText.SelectedText = Clipboard.GetText
		e.Handled = True
	End If

	If e.KeyCode = Keys.Tab Then
		If myText.SelectedText.Length <> 0 Then
			Dim start As Integer = myText.SelectionStart
			Dim str As String = myText.SelectedText
			Dim last As String = str.Substring(str.Length - 1, 1)
			Dim last2 As String = str.Substring(str.Length - 2, 1)

			If e.Shift Then
				If str.Substring(0, 1) = ControlChars.Tab Then
					str = str.Substring(1, str.Length - 1)
				End If
				str = str.Replace(ControlChars.Lf + ControlChars.Tab, ControlChars.Lf)
				myText.SelectedText = str
				Dim length As Integer = str.Length
				myText.Select(start, length)
			Else
				If last = ControlChars.Lf And last2 = ControlChars.Lf Then
					str = str.Substring(0, str.Length - 2)
					str = str.Replace(ControlChars.Lf, ControlChars.Lf + ControlChars.Tab)
					str = str + ControlChars.Lf + ControlChars.Lf
					str = ControlChars.Tab + str
					str = str.Replace(ControlChars.Tab + ControlChars.Lf, ControlChars.Lf)
					Dim length As Integer = str.Length
					myText.SelectedText = str
					myText.Select(start, length)
				Else
					str = str.Substring(0, str.Length - 1)
					str = str.Replace(ControlChars.Lf, ControlChars.Lf + ControlChars.Tab)
					str = str + last
					str = ControlChars.Tab + str
					str = str.Replace(ControlChars.Tab + ControlChars.Lf, ControlChars.Lf)
					Dim length As Integer = str.Length
					myText.SelectedText = str
					myText.Select(start, length)
				End If

			End If
			e.SuppressKeyPress = True
		End If
	End If

	RaiseEvent KeyDown(sender, e)

End Sub

' *******************************************************************
' キーの処理
' *******************************************************************
Private Sub myText_KeyPress(ByVal sender As System.Object, _
  ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles myText.KeyPress

	RaiseEvent KeyPress(sender, e)

End Sub

Private Sub myText_KeyUp(ByVal sender As System.Object, _
  ByVal e As System.Windows.Forms.KeyEventArgs) Handles myText.KeyUp

	RaiseEvent KeyUp(sender, e)

End Sub

' *******************************************************************
' データが変更された時の処理
' *******************************************************************
Private Sub myText_TextChanged(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles myText.TextChanged

	Me.rowArea.Refresh()
	RaiseEvent TextChanged(sender, e)

End Sub

' *******************************************************************
' フォントが変更された時の処理
' *******************************************************************
Private Sub myText_FontChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles myText.FontChanged

	lineHeight = myText.Font.GetHeight()
	Me.rowArea.Refresh()

End Sub

' *******************************************************************
' 縦スクロール
' *******************************************************************
Private Sub myText_VScroll(ByVal sender As System.Object, _
   ByVal e As System.EventArgs) Handles myText.VScroll

	Me.rowArea.Refresh()
	RaiseEvent VScroll(sender, e)

End Sub

' *******************************************************************
' 横スクロール
' *******************************************************************
Private Sub myText_HScroll(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles myText.HScroll

	RaiseEvent HScroll(sender, e)

End Sub

<System.ComponentModel.Browsable(False)> _
 Public Overrides Property Font() As System.Drawing.Font
	Get
		Return myText.Font
	End Get
	Set(ByVal value As System.Drawing.Font)
		myText.Font = value
	End Set
End Property

' *******************************************************************
' フォントプロパティ
' *******************************************************************
Public Property TextFont() As System.Drawing.Font
	Get
		Return myText.Font
	End Get
	Set(ByVal value As System.Drawing.Font)
		myText.Font = value
	End Set
End Property

<System.ComponentModel.Browsable(False)> _
Public Overrides Property BackColor() As System.Drawing.Color
	Get
		Return myText.BackColor
	End Get
	Set(ByVal value As System.Drawing.Color)
		myText.BackColor = value
	End Set
End Property

' *******************************************************************
' 背景色プロパティ
' *******************************************************************
Public Property TextBackColor() As System.Drawing.Color
	Get
		Return myText.BackColor
	End Get
	Set(ByVal value As System.Drawing.Color)
		myText.BackColor = value
	End Set
End Property

' *******************************************************************
' 行番号の背景色プロパティ
' *******************************************************************
Public Property RowBackColor() As System.Drawing.Color
	Get
		Return rowAreaBackColor
	End Get
	Set(ByVal value As System.Drawing.Color)
		rowAreaBackColor = value
		Me.rowArea.Refresh()
	End Set
End Property

<System.ComponentModel.Browsable(False)> _
Public Overrides Property Text() As String
	Get
		Return myText.Text
	End Get
	Set(ByVal value As String)
		myText.Text = value
	End Set
End Property

Public Property [ReadOnly]() As Boolean
	Get
		Return myText.ReadOnly
	End Get
	Set(ByVal value As Boolean)
		myText.ReadOnly = value
	End Set
End Property

' *******************************************************************
' RichTextBox のインスタンス
' *******************************************************************
Public ReadOnly Property Editor() As RichTextBox
	Get
		Return myText
	End Get
End Property

' *******************************************************************
' 行番号部分の幅
' *******************************************************************
Public Property RowAreaWidth() As Integer
	Get
		Return rowArea.Width
	End Get
	Set(ByVal value As Integer)
		rowArea.Width = value
		myText.Location = New System.Drawing.Point(value + 1, 0)
		myText.Width = Me.Width - value - 5
		Me.rowArea.Refresh()
	End Set
End Property

' *******************************************************************
' このコントロールのサイズ変更
' *******************************************************************
Private Sub LboxEditor_SizeChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.SizeChanged

	Me.rowArea.Refresh()

End Sub

' *******************************************************************
' 内部 PictureBox( 高速描画用 )
' *******************************************************************
Private Class LboxEditorPicture
	Inherits System.Windows.Forms.PictureBox

	Protected Overrides Sub OnCreateControl()

		MyBase.OnCreateControl()
	End Sub

	Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)

		If Not Me.DesignMode Then
			CType(Me.Parent, Object).ResetRowArea(pe.Graphics)
		End If

	End Sub

End Class
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[dnettool]
claudebot
24/03/29 03:40:58
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube