Files
Hanjeon/Sub/MyControl(OleDb)v2/Spread.Net.v13/MyFpoint.vb
2020-05-24 21:15:53 +09:00

851 lines
35 KiB
VB.net

Public Class MyFpoint
Inherits FarPoint.Win.Spread.FpSpread
Private v_AAutoAddrowInLast As ToolStripButton = Nothing
Private V_enterToTab As Boolean = False
Private V_DeleteKey As Boolean = False
Private V_CurrentDel As Boolean = False
Private V_FIRSTINDEX As Integer = 0
Private V_NextRowindex As Integer = -1
Private A_Ubound As New ArrayList
Private V_SpaceEdit As Boolean = True
Private V_sameRHeight As Boolean = True
Private V_선택줄번호 As Int16 = -1
<System.ComponentModel.Description("더이상데이터가없는 마지막줄일때 자동으로 해당 버튼을 클릭해줍니다.")> _
Public Property AAutoAddrowInLast() As ToolStripButton
Get
Return Me.v_AAutoAddrowInLast
End Get
Set(ByVal value As ToolStripButton)
Me.v_AAutoAddrowInLast = value
End Set
End Property
<System.ComponentModel.Description("선택용 체크박스의 인덱스번호를 입력하세요")> _
Public Property 선택줄번호() As Int16
Get
Return V_선택줄번호
End Get
Set(ByVal value As Int16)
V_선택줄번호 = value
End Set
End Property
<System.ComponentModel.Description("줄너비가 변경될때 모두 같이 변경됩니다")> _
Public Property SameRowheight() As Boolean
Get
Return V_sameRHeight
End Get
Set(ByVal value As Boolean)
V_sameRHeight = value
End Set
End Property
<System.ComponentModel.Description("스페이스키를 누르면 편집모드로 들어갑니다")> _
Public Property EditFromSpace() As Boolean
Get
Return V_SpaceEdit
End Get
Set(ByVal value As Boolean)
V_SpaceEdit = value
End Set
End Property
''' <summary>
''' 중복된 데이터를 검색합니다. startindex = 시작할 줄번호,endindex = 종료할 줄번호, source 검색원본의 열번호들, target 검색대상의 열번호들
''' 검색완료후 전체 중복된 갯수를 리턴합니다.
''' </summary>
''' <param name="StartIndex"></param>
''' <param name="EndIndex"></param>
''' <param name="Source"></param>
''' <param name="Tartger"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function 중복검사(ByVal StartIndex As Integer, ByVal EndIndex As Integer, ByVal Source() As Short, ByVal Tartger() As Short, Optional ByVal CheckColnum As Short = -1, Optional ByVal PBar As ProgressBar = Nothing) As Integer
'''''검색방법은 1번개체부터 마지막개체까지 풀루프를 돌면서 동일한 놈을 찾는다.
Dim 원본, 대상 As String 'New System.Text.StringBuilder
Dim fcnt As Integer = 0
If Not PBar Is Nothing Then
PBar.Value = StartIndex
PBar.Minimum = StartIndex
PBar.Maximum = EndIndex
End If
'NOTICE("중복되는 [전주번호]를 찾는중입니다...", Me.lb_msg)
'Me.Invalidate()
For A As Integer = StartIndex To EndIndex
원본 = ""
For Each T As Short In Source
원본 &= Me.ActiveSheet.Cells(A, T).Value
Next
If 원본.ToString <> "" Then
For B As Integer = StartIndex To EndIndex
If A <> B Then '//같은라인은 피하고 그렇지 않은 라인의 번호를 확인한다.
대상 = ""
For Each T As Short In Tartger
대상 &= Me.ActiveSheet.Cells(B, T).Value
Next
If 원본.ToString = 대상.ToString Then
'MsgBox(원본)
fcnt += 1
If CheckColnum > -1 Then
Me.ActiveSheet.Cells(A, CheckColnum).Value = True
Me.ActiveSheet.Cells(B, CheckColnum).Value = True
End If
End If
End If
Next
End If
If Not PBar Is Nothing Then
If PBar.Value < PBar.Maximum Then PBar.Value += 1
Me.Invalidate()
End If
Next
Return fcnt
'NOTICE("[전주번호] 중복검사 완료(" & fcnt & "개의 데이터를 찾았습니다)", Me.lb_msg)
End Function
''' <summary>
''' 중복된 데이터를 검색합니다. startindex = 시작할 줄번호,endindex = 종료할 줄번호, source 검색원본의 열번호들, target 검색대상의 열번호들
''' 검색완료후 전체 중복된 갯수를 리턴합니다.
''' </summary>
''' <param name="StartIndex"></param>
''' <param name="EndIndex"></param>
''' <param name="Source"></param>
''' <param name="Tartger"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function 중복검사2(ByVal StartIndex As Integer, ByVal EndIndex As Integer, ByVal Source() As Short, ByVal Tartger() As Short, Optional ByVal CheckColnum As Short = -1, Optional ByVal PBar As ProgressBar = Nothing) As Integer
'''''검색방법은 1번개체부터 마지막개체까지 풀루프를 돌면서 동일한 놈을 찾는다.
Dim 원본, 대상 As String 'New System.Text.StringBuilder
Dim fcnt As Integer = 0
If Not PBar Is Nothing Then
PBar.Value = StartIndex
PBar.Minimum = StartIndex
PBar.Maximum = EndIndex
End If
For A As Integer = StartIndex To EndIndex
원본 = ""
For Each T As Short In Source
원본 &= Me.ActiveSheet.Cells(A, T).Value
Next
If 원본.Trim.ToString <> "" Then
For B As Integer = StartIndex To EndIndex
If A <> B Then '//같은라인은 피하고 그렇지 않은 라인의 번호를 확인한다.
대상 = ""
For Each T As Short In Tartger
대상 &= Me.ActiveSheet.Cells(B, T).Value
Next
If 원본.Trim.ToString = 대상.Trim.ToString Then
fcnt += 1
If CheckColnum > -1 Then
Me.ActiveSheet.Cells(A, CheckColnum).Value = True
Me.ActiveSheet.Cells(B, CheckColnum).Value = True
End If
End If
End If
Next
End If
If Not PBar Is Nothing Then
If PBar.Value < PBar.Maximum Then PBar.Value += 1
Me.Invalidate()
End If
Next
Return fcnt
'NOTICE("[전주번호] 중복검사 완료(" & fcnt & "개의 데이터를 찾았습니다)", Me.lb_msg)
End Function
Public Function 중복검사같은줄(ByVal StartIndex As Integer, ByVal EndIndex As Integer, ByVal Source() As Short, ByVal Tartger() As Short, Optional ByVal CheckColnum As Short = -1, Optional ByVal PBar As ProgressBar = Nothing, Optional ByVal TrueDirection As Boolean = True) As Integer
Dim 원본, 대상 As String 'New System.Text.StringBuilder
Dim fcnt As Integer = 0
Dim Can As Boolean = False
If Not PBar Is Nothing Then : PBar.Value = StartIndex : PBar.Minimum = StartIndex : PBar.Maximum = EndIndex : End If
For A As Integer = StartIndex To EndIndex
원본 = "" : 대상 = ""
Can = False
For Each T As Short In Source
원본 &= Me.ActiveSheet.Cells(A, T).Value
Next
For Each T As Short In Tartger
대상 &= Me.ActiveSheet.Cells(A, T).Value
Next
If 원본.Trim.ToString <> "" Then
If TrueDirection = True Then
If 원본.Trim.ToString = 대상.Trim.ToString Then Can = True
Else
If 원본.Trim.ToString <> 대상.Trim.ToString Then Can = True
End If
If Can Then
fcnt += 1
If CheckColnum > -1 Then Me.ActiveSheet.Cells(A, CheckColnum).Value = True
End If
End If
If Not PBar Is Nothing Then
If PBar.Value < PBar.Maximum Then PBar.Value += 1
Me.Invalidate()
End If
Next
Return fcnt
End Function
Public Function 중복검사같은줄공란포함(ByVal StartIndex As Integer, ByVal EndIndex As Integer, ByVal Source() As Short, ByVal Tartger() As Short, Optional ByVal CheckColnum As Short = -1, Optional ByVal PBar As ProgressBar = Nothing, Optional ByVal TrueDirection As Boolean = True) As Integer
Dim 원본, 대상 As String 'New System.Text.StringBuilder
Dim fcnt As Integer = 0
Dim Can As Boolean = False
If Not PBar Is Nothing Then : PBar.Value = StartIndex : PBar.Minimum = StartIndex : PBar.Maximum = EndIndex : End If
For A As Integer = StartIndex To EndIndex
원본 = "" : 대상 = ""
Can = False
For Each T As Short In Source
원본 &= Me.ActiveSheet.Cells(A, T).Text
Next
For Each T As Short In Tartger
대상 &= Me.ActiveSheet.Cells(A, T).Text
Next
If TrueDirection = True Then
If 원본.Trim.ToString = 대상.Trim.ToString Then Can = True
Else
If 원본.Trim.ToString <> 대상.Trim.ToString Then Can = True
End If
If Can Then
fcnt += 1
If CheckColnum > -1 Then Me.ActiveSheet.Cells(A, CheckColnum).Value = True
End If
If Not PBar Is Nothing Then
If PBar.Value < PBar.Maximum Then PBar.Value += 1
Me.Invalidate()
End If
Next
Return fcnt
End Function
''' <summary>
''' 사용하지 않는걸 권장합니다( 이명령은 insertNewrow 로 사용하길 권장합니다.)
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function AddRowsU() As Integer
Dim Idx As Integer
With Me.ActiveSheet
If .RowCount <= 0 Then '//데이터가 아에없다면
Idx = 0
.AddUnboundRows(Idx, 1)
.Rows(Idx).Tag = "UNBOUND"
.ActiveRowIndex = 0
.ActiveColumnIndex = Me.FIRST_FOCUSINDEX
A_Ubound.Add(Idx)
Else
Idx = IIf(.ActiveRow.Index < 0, 0, .ActiveRow.Index)
.AddUnboundRows(Idx, 1)
.Rows(Idx).Tag = "UNBOUND"
A_Ubound.Add(Idx)
End If
End With
Return Idx
End Function
''' <summary>
''' 현재위치 위에 새로운 행을 추가합니다(바운드 적용됨)
''' </summary>
''' <remarks></remarks>
Public Sub Arin_InsertNewRow()
If Not Me.Focused Then Me.Focus()
Me.ActiveSheet.Rows.Add(Me.ActiveSheet.ActiveRowIndex, 1)
Me.ActiveSheet.SetActiveCell(Me.ActiveSheet.ActiveRowIndex, Me.FIRST_FOCUSINDEX)
End Sub
''' <summary>
''' 마지막에 새로운 행을 추가합니다(바운드 적용됨)
''' </summary>
''' <remarks></remarks>
Public Sub Arin_AddNewRow()
If Not Me.Focused Then Me.Focus()
Me.ActiveSheet.Rows.Add(Me.ActiveSheet.RowCount, 1)
Me.ActiveSheet.SetActiveCell(Me.ActiveSheet.RowCount, Me.FIRST_FOCUSINDEX)
SendKeys.Send("{ENTER}")
End Sub
''' <summary>
''' 마지막에 새로운 행을 추가합니다.(바운드적용안됨)
''' </summary>
''' <remarks></remarks>
Public Sub Arin_AddNewRowU()
If Not Me.Focused Then Me.Focus()
Dim Idx As Integer
Me.ActiveSheet.AddUnboundRows(Me.ActiveSheet.RowCount, 1)
Idx = Me.ActiveSheet.RowCount - 1
Me.ActiveSheet.Rows(Idx).Tag = "UNBOUND"
Me.ActiveSheet.SetActiveCell(Me.ActiveSheet.RowCount, Me.FIRST_FOCUSINDEX)
SendKeys.Send("{ENTER}")
End Sub
Public Function NewRowsU() As Integer
Dim Idx As Integer
Me.ActiveSheet.AddUnboundRows(Me.ActiveSheet.RowCount, 1)
Idx = Me.ActiveSheet.RowCount - 1
Me.ActiveSheet.Rows(Idx).Tag = "UNBOUND"
A_Ubound.Add(Idx) '--언바운드목록에 제외시켜버린다
Return Idx
End Function
Public Sub Attach_Ubound(Optional ByVal NullChkColnum As Integer = -1)
' MsgBox(A_Ubound.Count)
Dim nullVal As Boolean = False
For Each A As Integer In A_Ubound
Try
If Me.ActiveSheet.Rows(CInt(A)).Tag = "UNBOUND" Then '//언바운드된열일경우에만
If NullChkColnum > -1 Then
nullVal = True
For z As Integer = NullChkColnum To Me.ActiveSheet.ColumnCount - 1
If Me.ActiveSheet.Cells(A, z).Text <> "" Then
'MsgBox(Me.ActiveSheet.Cells(A, z).Text)
nullVal = False
Exit For
End If
Next
End If
If Not nullVal Then Me.ActiveSheet.AddRowToDataSource(CInt(A), True)
End If
Catch ex As Exception
MsgBox("[Err]Add-Unbound Row" & vbCrLf & ex.Message.ToString)
End Try
Next
A_Ubound.Clear()
End Sub
<System.ComponentModel.Description("줄바꿈을 할 열 번호입니다")> _
Public Property NextRow_Index() As Integer
Get
Return V_NextRowindex
End Get
Set(ByVal value As Integer)
V_NextRowindex = value
End Set
End Property
<System.ComponentModel.Description("줄이 바뀌었을때 커서가 위치할 시작 값입니다.")> _
Public Property FIRST_FOCUSINDEX() As Integer
Get
Return V_FIRSTINDEX
End Get
Set(ByVal value As Integer)
V_FIRSTINDEX = value
End Set
End Property
<System.ComponentModel.Description("Del 키를 누를시 커서가 위치한 셀의 값을 초기합니다")> _
Public Property CurrentDel() As Boolean
Get
Return V_CurrentDel
End Get
Set(ByVal value As Boolean)
V_CurrentDel = value
End Set
End Property
<System.ComponentModel.Description("Shift+Del 키를 누를시 해당 줄을 삭제합니다.")> _
Public Property DeleteKey() As Boolean
Get
Return V_DeleteKey
End Get
Set(ByVal value As Boolean)
V_DeleteKey = value
End Set
End Property
''' <summary>
''' 입력된 줄번호와 태그=데이터필드 가 일치하는 셀을 반환합니다.
''' </summary>
''' <param name="index"></param>
''' <param name="Tag"></param>
''' <param name="Sheetindex"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Cells(ByVal index As Integer, ByVal Tag As Object, Optional ByVal Sheetindex As Integer = -1) As FarPoint.Win.Spread.Cell
Dim RetVal As FarPoint.Win.Spread.Cell = Nothing
If Sheetindex = -1 Then Sheetindex = Me.ActiveSheetIndex
For Each SC As FarPoint.Win.Spread.Column In Me.Sheets(Sheetindex).Columns
If SC.DataField.ToUpper = Tag.ToString.ToUpper Then
RetVal = Me.Sheets(Sheetindex).Cells(index, SC.Index)
Exit For
End If
Next
If RetVal Is Nothing Then
MsgBox("Can't Find column [" & Tag.ToString & "]", MsgBoxStyle.Critical, "Farpoint function Cells")
End If
Return RetVal
End Function
''' <summary>
''' 현재선택된 줄의 열번호에해당하는 셀을 반환합니다.
''' </summary>
''' <param name="Columnindex"></param>
''' <param name="Sheetindex"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Cells(ByVal Columnindex As Integer, Optional ByVal Sheetindex As Integer = -1) As FarPoint.Win.Spread.Cell
Dim RetVal As FarPoint.Win.Spread.Cell = Nothing
If Sheetindex = -1 Then Sheetindex = Me.ActiveSheetIndex
Return Me.Sheets(Sheetindex).Cells(Me.ActiveSheet.ActiveRowIndex, Columnindex)
Return RetVal
End Function
''' <summary>
''' 현재선택된 셀을 반환합니다
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function Cells() As FarPoint.Win.Spread.Cell
Dim RetVal As FarPoint.Win.Spread.Cell = Nothing
Return Me.ActiveSheet.ActiveCell
End Function
Public Function ActiveCell() As FarPoint.Win.Spread.Cell
Dim RetVal As FarPoint.Win.Spread.Cell = Nothing
Return Me.ActiveSheet.ActiveCell
End Function
''' <summary>
''' 전줄의 현재열위치 셀을 반환
''' </summary>
''' <param name="FirstrowValueisNothing"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function PreRCells(Optional ByVal FirstrowValueisNothing As Boolean = False) As FarPoint.Win.Spread.Cell
If FirstrowValueisNothing AndAlso Me.ActiveRowindex = 0 Then Return Nothing
If Me.ActiveRowindex = 0 Then
If FirstrowValueisNothing Then
Return Nothing
Else
Return Me.ActiveSheet.ActiveCell
End If
Else
Return Me.ActiveSheet.Cells(Me.ActiveRowindex - 1, Me.ActiveColumnindex)
End If
End Function
''' <summary>
''' 앞셀을 반환
''' </summary>
''' <param name="FirstColValueisNothing"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function PreCells(Optional ByVal FirstColValueisNothing As Boolean = False) As FarPoint.Win.Spread.Cell
If FirstColValueisNothing AndAlso Me.ActiveColumnindex = 0 Then Return Nothing
If Me.ActiveColumnindex = 0 Then
If FirstColValueisNothing Then
Return Nothing
Else
Return Me.ActiveSheet.ActiveCell
End If
Else
Return Me.ActiveSheet.Cells(Me.ActiveRowindex, Me.ActiveColumnindex - 1)
End If
End Function
''' <summary>
''' 입력된 태그와 데이터필드가 일치하는 셀을 반환합니다.(줄번호는 현재줄)
''' </summary>
''' <param name="Tag"></param>
''' <param name="Sheetindex"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function Cells(ByVal Tag As Object, Optional ByVal Sheetindex As Integer = -1) As FarPoint.Win.Spread.Cell
Dim RetVal As FarPoint.Win.Spread.Cell = Nothing
If Sheetindex = -1 Then Sheetindex = Me.ActiveSheetIndex
For Each SC As FarPoint.Win.Spread.Column In Me.Sheets(Sheetindex).Columns
If SC.DataField.ToUpper = Tag.ToString.ToUpper Then
RetVal = Me.Sheets(Sheetindex).Cells(Me.ActiveRowindex, SC.Index)
Exit For
End If
Next
If RetVal Is Nothing Then
MsgBox("Can't Find column [" & Tag.ToString & "]", MsgBoxStyle.Critical, "Farpoint function Cells")
End If
Return RetVal
End Function
''' <summary>
''' 활성화된 열제목줄을 반환합니다.
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function ActiveColumn() As FarPoint.Win.Spread.Column
Return Me.ActiveSheet.Columns(Me.ActiveColumnindex)
End Function
''' <summary>
''' 입력된 태그와 데이터필드가 일치하는 셀을 반환합니다.(줄번호는 현재줄)
''' </summary>
''' <param name="Tag"></param>
''' <param name="Sheetindex"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function CCells(ByVal Tag As Object, Optional ByVal Sheetindex As Integer = -1) As FarPoint.Win.Spread.Cell
Dim RetVal As FarPoint.Win.Spread.Cell = Nothing
If Sheetindex = -1 Then Sheetindex = Me.ActiveSheetIndex
For Each SC As FarPoint.Win.Spread.Column In Me.Sheets(Sheetindex).Columns
If SC.DataField.ToUpper = Tag.ToString.ToUpper Then
RetVal = Me.Sheets(Sheetindex).Cells(Me.ActiveRowindex, SC.Index)
Exit For
End If
Next
If RetVal Is Nothing Then
MsgBox("Can't Find column [" & Tag.ToString & "]", MsgBoxStyle.Critical, "Farpoint function Cells")
End If
Return RetVal
End Function
''' <summary>
''' 활성화된 줄번호를 반환
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function ActiveRowindex() As Integer
Return Me.ActiveSheet.ActiveRowIndex
End Function
''' <summary>
''' 활성화된 열버호를 반환
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function ActiveColumnindex() As Integer
Return Me.ActiveSheet.ActiveColumnIndex
End Function
''' <summary>
''' 엔터키를 누르면 다음셀로이동하는 키맵을 설정합니다.
''' </summary>
''' <remarks></remarks>
Public Sub EnterToNextItem()
Dim im As New FarPoint.Win.Spread.InputMap
im = Me.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenAncestorOfFocused)
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap)
im = Me.GetInputMap(FarPoint.Win.Spread.InputMapMode.WhenFocused)
im.Put(New FarPoint.Win.Spread.Keystroke(Keys.Enter, Keys.None), FarPoint.Win.Spread.SpreadActions.MoveToNextColumnWrap)
End Sub
Public Sub NEXT_CELL()
If Me.ActiveSheet.ActiveRowIndex <> Me.ActiveSheet.RowCount - 1 Then '//마지막줄이 아니면
If Me.ActiveSheet.ActiveColumnIndex = Me.ActiveSheet.ColumnCount - 1 Then '/마지막열이면 다음줄 첨으로 이동
'SendKeys.Send("{TAB}")
Me.ActiveSheet.ActiveRowIndex += 1
Me.ActiveSheet.ActiveColumnIndex = V_FIRSTINDEX '//첫인덱스로 옴긴다.기본값은 0이다.
'Me.ActiveSheet.SetActiveCell(Me.ActiveSheet.ActiveRowIndex + 1, V_FIRSTINDEX)
Else
'SendKeys.Send("{TAB}")
'Me.ActiveSheet.SetActiveCell(Me.ActiveSheet.ActiveRowIndex, Me.ActiveSheet.ActiveColumnIndex + 1)
'Me.ActiveSheet.IsSelected(Me.ActiveSheet.ActiveRowIndex, Me.ActiveSheet.ActiveColumnIndex + 1)
'ME.ActiveSheet.SEL
Me.ActiveSheet.ActiveColumnIndex += 1
End If
Else
If Me.ActiveSheet.ActiveColumnIndex <> Me.ActiveSheet.ColumnCount - 1 Then '/마지막열이면 다음줄 첨으로 이동
'Me.ActiveSheet.ActiveRowIndex += 1
Me.ActiveSheet.ActiveColumnIndex += 1 '//첫인덱스로 옴긴다.기본값은 0이다.
End If
End If
End Sub
Public Sub NEXT_ROW()
If Me.ActiveSheet.ActiveRowIndex <> Me.ActiveSheet.RowCount - 1 Then '//마지막줄이 아니면
Me.ActiveSheet.ActiveRowIndex += 1
Me.ActiveSheet.ActiveColumnIndex = V_FIRSTINDEX '//첫인덱스로 옴긴다.기본값은 0이다.
End If
End Sub
Public Sub ItemCheck_Select(Optional ByVal index As Int16 = -1)
Dim sheet As FarPoint.Win.Spread.SheetView = Me.ActiveSheet
If index = -1 AndAlso Me.선택줄번호 <> -1 Then index = 선택줄번호 '//지정된열제목이 잇는지
sheet.AutoFilterReset(index) '//필터적용시 만힝 느리므로 필터를 해제한다.
For i As Integer = 0 To sheet.RowCount - 1
sheet.Cells(i, index).Value = True
Next
End Sub
Public Sub ItemCheck_Unselect(Optional ByVal index As Int16 = -1)
Dim sheet As FarPoint.Win.Spread.SheetView = Me.ActiveSheet
If index = -1 AndAlso Me.선택줄번호 <> -1 Then index = 선택줄번호 '//지정된열제목이 잇는지
sheet.AutoFilterReset(index) '//필터적용시 만힝 느리므로 필터를 해제한다.
For i As Integer = 0 To sheet.RowCount - 1
sheet.Cells(i, index).Value = False
Next
End Sub
Public Sub ItemCheck_Reverse(Optional ByVal index As Int16 = -1)
Dim sheet As FarPoint.Win.Spread.SheetView = Me.ActiveSheet
If index = -1 AndAlso Me.선택줄번호 <> -1 Then index = 선택줄번호 '//지정된열제목이 잇는지
sheet.AutoFilterReset(index) '//필터적용시 만힝 느리므로 필터를 해제한다.
For i As Integer = 0 To sheet.RowCount - 1
sheet.Cells(i, index).Value = IIf(sheet.Cells(i, index).Value = True, False, True)
Next
End Sub
''' <summary>
''' 뷰의 열너비,열이름(옵션),줌팩터등을 저장합니다.
''' </summary>
''' <param name="ColName"></param>
''' <remarks></remarks>
Public Sub Setting_Save(Optional ByVal ColName As Boolean = True, Optional ByVal Tag As String = "", Optional ByVal FN As String = "")
ColSize_Save(Tag, FN)
If ColName Then ColName_Save(Tag, FN)
CurrentState_Save(Tag, FN)
AZOOM_Save(Tag, FN)
End Sub
''' <summary>
''' 뷰의 열너비,열이름(옵션),줌팩터등을 불러옵니다
''' </summary>
''' <param name="ColName"></param>
''' <remarks></remarks>
Public Sub Setting_Load(Optional ByVal ColName As Boolean = True, Optional ByVal Tag As String = "", Optional ByVal FN As String = "")
ColSize_Load(Tag, FN)
If ColName Then ColName_Load(Tag, FN)
CurrentState_Load(Tag, FN)
AZOOM_LOAD(Tag, FN)
End Sub
''' <summary>
''' 현재 열너비를 Spread.ini 파일에 저장합니다.
''' </summary>
''' <remarks></remarks>
Public Sub AZOOM_Save(ByVal tag As String, ByVal fn As String)
Dim File As New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\" & fn & "spread.INI")
If System.IO.Directory.Exists(File.DirectoryName) = False Then System.IO.Directory.CreateDirectory(File.DirectoryName)
Dim a As New MyINI2(File.FullName)
a.Write(Me.Parent.Name & "-" & (Me.Name & tag), "ZOOM", Me.ActiveSheet.ZoomFactor)
End Sub
''' <summary>
''' 현재 열너비를 Spread.ini 파일로 부터 불러옵니다.
''' </summary>
''' <remarks></remarks>
Public Sub AZOOM_LOAD(ByVal tag As String, ByVal fn As String)
Dim FILEname As String = My.Application.Info.DirectoryPath & "\" & fn & "spread.INI"
If Not System.IO.File.Exists(FILEname) Then
MsgBox("열너비 파일이 존재하지 않습니다", MsgBoxStyle.Critical, "열너비설정-오류")
ColSize_Save(tag, fn)
Return
End If
'MsgBox("PARENT" & Me.Parent.Name.ToString & "/" & Me.Parent.Text)
Dim a As New MyINI2(FILEname)
Me.ActiveSheet.ZoomFactor = a.Read(Me.Parent.Name & "-" & (Me.Name & tag), "ZOOM", 1)
End Sub
''' <summary>
''' 현재 열너비를 Spread.ini 파일에 저장합니다.
''' </summary>
''' <remarks></remarks>
Public Sub ColSize_Save(ByVal tag As String, ByVal fn As String)
Dim File As New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\" & fn & "spread.INI")
If System.IO.Directory.Exists(File.DirectoryName) = False Then System.IO.Directory.CreateDirectory(File.DirectoryName)
Dim a As New MyINI2(File.FullName)
For Each z As FarPoint.Win.Spread.Column In Me.ActiveSheet.Columns
a.Write(Me.Parent.Name & "-" & (Me.Name & tag), "COLSIZE" & z.Index.ToString, z.Width)
Next
End Sub
''' <summary>
''' 현재 열너비를 Spread.ini 파일로 부터 불러옵니다.
''' </summary>
''' <remarks></remarks>
Public Sub ColSize_Load(ByVal tag As String, ByVal fn As String)
Dim FILEname As String = My.Application.Info.DirectoryPath & "\" & fn & "spread.INI"
If Not System.IO.File.Exists(FILEname) Then
MsgBox("열너비 파일이 존재하지 않습니다", MsgBoxStyle.Critical, "열너비설정-오류")
ColSize_Save(tag, fn)
Return
End If
'MsgBox("PARENT" & Me.Parent.Name.ToString & "/" & Me.Parent.Text)
Dim a As New MyINI2(FILEname)
For Each col As FarPoint.Win.Spread.Column In Me.ActiveSheet.Columns
'MsgBox(COL.Index)
'a.Write(Me.Parent.Name, "COLSIZE" & COL.Index.ToString, File, COL.Width)
Try
col.Width = a.Read(Me.Parent.Name & "-" & (Me.Name & tag), "COLSIZE" & col.Index.ToString)
Catch ex As Exception '//없을경우에는 에러를 내므로 그냥 나간다
End Try
Next
End Sub
Public Sub ColName_Load(ByVal tag As String, ByVal fn As String)
Dim FILEname As String = My.Application.Info.DirectoryPath & "\" & fn & "spread.INI"
If Not System.IO.File.Exists(FILEname) Then
MsgBox("열너비 파일이 존재하지 않습니다", MsgBoxStyle.Critical, "열너비설정-오류")
ColSize_Save(tag, fn)
Return
End If
'MsgBox("PARENT" & Me.Parent.Name.ToString & "/" & Me.Parent.Text)
Dim a As New MyINI2(FILEname)
For Each col As FarPoint.Win.Spread.Column In Me.ActiveSheet.Columns
'MsgBox(COL.Index)
'a.Write(Me.Parent.Name, "COLSIZE" & COL.Index.ToString, File, COL.Width)
Try
col.Label = a.Read(Me.Parent.Name & "-" & Me.Name & tag, "COLNAME" & col.Index.ToString).ToString.Trim(Chr(0))
Catch ex As Exception '//없을경우에는 에러를 내므로 그냥 나간다
End Try
Next
End Sub
Public Sub ColName_Save(ByVal tag As String, ByVal fn As String)
Dim File As New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\" & fn & "spread.INI")
If System.IO.Directory.Exists(File.DirectoryName) = False Then System.IO.Directory.CreateDirectory(File.DirectoryName)
Dim a As New MyINI2(File.FullName)
For Each z As FarPoint.Win.Spread.Column In Me.ActiveSheet.Columns
a.Write(Me.Parent.Name & "-" & Me.Name & tag, "COLNAME" & z.Index.ToString, z.Label)
Next
End Sub
''' <summary>
''' [보충요망] :줄높이를 저장
''' </summary>
''' <remarks></remarks>
Public Sub CurrentState_Save(ByVal tag As String, ByVal fn As String)
Dim File As New System.IO.FileInfo(My.Application.Info.DirectoryPath & "\" & fn & "spread.INI")
If System.IO.Directory.Exists(File.DirectoryName) = False Then System.IO.Directory.CreateDirectory(File.DirectoryName)
Dim a As New MyINI2(File.FullName)
a.Write(Me.Parent.Name & "-" & Me.Name & tag, "RowHeight", Me.ActiveSheet.Rows.Default.Height)
End Sub
''' <summary>
''' [보충요망] :줄높이를 불러온다.(spre.ini)
''' </summary>
''' <remarks></remarks>
Public Sub CurrentState_Load(ByVal tag As String, ByVal fn As String)
Dim FILEname As String = My.Application.Info.DirectoryPath & "\" & fn & "spread.INI"
If Not System.IO.File.Exists(FILEname) Then
MsgBox("열너비 파일이 존재하지 않습니다", MsgBoxStyle.Critical, "열너비설정-오류")
CurrentState_Save(tag, fn)
Return
End If
Dim a As New MyINI2(My.Application.Info.DirectoryPath & "\" & fn & "spread.INI")
Me.ActiveSheet.Rows.Default.Height = a.Read(Me.Parent.Name & "-" & Me.Name & tag, "RowHeight", 20)
End Sub
Private Sub Delete_itm(Optional ByVal rowindex As Integer = -1, Optional ByVal prompt As Boolean = True)
Dim Commit As Boolean = True
Dim A As New System.Text.StringBuilder("경고 : 데이터 삭제를 선택했습니다")
A.AppendLine()
A.AppendLine("현재 선택된 줄이 삭제됩니다")
A.AppendLine("계속하시겠습니까?")
If prompt Then
If MsgBox(A.ToString, MsgBoxStyle.Critical + MsgBoxStyle.OkCancel, "선택줄 삭제") <> MsgBoxResult.Ok Then Commit = False
End If
If Not Commit Then Return '//명령프롬프트에서 취소를 선택햇을시에는 빠져나간다.
Me.ActiveSheet.ActiveRow.Remove()
End Sub
Private Sub MyFpoint_EditModeOff(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.EditModeOff
End Sub
''' <summary>
''' 전줄의 현재열위치 셀을 반환
''' </summary>
''' <param name="FirstrowValueisNothing"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function CellsPR(Optional ByVal FirstrowValueisNothing As Boolean = False) As FarPoint.Win.Spread.Cell
If FirstrowValueisNothing AndAlso Me.ActiveRowindex = 0 Then Return Nothing
If Me.ActiveRowindex = 0 Then
If FirstrowValueisNothing Then
Return Nothing
Else
Return Me.ActiveSheet.ActiveCell
End If
Else
Return Me.ActiveSheet.Cells(Me.ActiveRowindex - 1, Me.ActiveColumnindex)
End If
End Function
Private Sub CustFP_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
e.Handled = True
e.SuppressKeyPress = False
Select Case e.KeyCode
Case Keys.Enter
If e.Control Then
Me.Cells.Value = Me.CellsPR.Value
Else
If Not Me.v_AAutoAddrowInLast Is Nothing Then
If Me.ActiveSheet.ActiveRowIndex = Me.ActiveSheet.RowCount - 1 Then '//마지막줄에
If Me.V_NextRowindex = Me.ActiveSheet.ActiveColumnIndex Then '//다음줄로가아햘 경우라면
e.Handled = True
Me.v_AAutoAddrowInLast.PerformClick()
ElseIf Me.ActiveSheet.ActiveColumnIndex = Me.ActiveSheet.ColumnCount - 1 Then '//마지막열이라면
e.Handled = True
Me.v_AAutoAddrowInLast.PerformClick()
End If
End If
Else
If Me.V_NextRowindex = Me.ActiveSheet.ActiveColumnIndex Then '//다음줄로가아햘 경우라면
Me.NEXT_ROW()
ElseIf Me.ActiveSheet.ActiveColumnIndex = Me.ActiveSheet.ColumnCount - 1 Then '//마지막열이라면
Me.NEXT_ROW()
End If
End If
End If
Case Keys.Delete
If e.Shift Then '//쉬프트가 눌러져잇을경우
If Me.V_DeleteKey Then Delete_itm(, True)
e.Handled = True
Else
If Me.V_CurrentDel Then
Me.ActiveSheet.ActiveCell.ResetValue()
Me.OnEditModeOff(Nothing)
e.Handled = True
End If
End If
Case Keys.Space
If Me.V_SpaceEdit Then EditMode = True
e.Handled = True
Case Else '//그외다른게입력되어있을경우에는 editmode 에 들어가게되므로 한글처리를 위해 바로 에디트모드로 들어오게한다.
If e.KeyCode >= Keys.NumPad0 AndAlso e.KeyCode <= Keys.NumPad9 Then
'//우측숫자패트
ElseIf e.KeyCode >= Keys.D0 AndAlso e.KeyCode <= Keys.D9 Then
'//일반숫자패드
Else
If Not e.Alt AndAlso Not e.Control AndAlso Me.ImeMode = System.Windows.Forms.ImeMode.Hangul Then
EditMode = True
End If
End If
End Select
End Sub
Private Sub CustFP_RowHeightChanged(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.RowHeightChangedEventArgs) Handles Me.RowHeightChanged
If Me.V_sameRHeight Then
Dim Row As FarPoint.Win.Spread.RowHeightChangeExtents = e.RowList(0)
Me.ActiveSheet.Rows.Default.Height = Me.ActiveSheet.Rows(Row.FirstRow).Height
End If
End Sub
End Class