SPREAD for Windows Forms 控制输入法
enc = System.Text.Encoding.GetEncoding("shift-jis") datamodel = CType(FpSpread1.ActiveSheet.Models.Data, Model.DefaultSheetDataModel) Dim enc As System.Text.Encoding Dim WithEvents datamodel As Model.DefaultSheetDataModel Private Sub datamodel_Changed(ByVal sender As Object, ByVal e As Model.SheetDataModelEventArgs) Handles datamodel.Changed ''非編集状態でクリップボードから貼り付けした場合 If e.Type = Model.SheetDataModelEventType.CellsUpdated Then Try If TypeOf (FpSpread1.Sheets(0).GetCellType(e.Row, e.Column)) Is CellType.TextCellType Then Dim tCell As CellType.TextCellType = CType(FpSpread1.Sheets(0).GetCellType(e.Row, e.Column), CellType.TextCellType) Dim s As String = CStr(datamodel.GetValue(e.Row, e.Column)) If enc.GetByteCount(s) > tCell.MaxLength Then s = enc.GetString(enc.GetBytes(s), 0, tCell.MaxLength) If enc.GetByteCount(s) > tCell.MaxLength Then s = enc.GetString(enc.GetBytes(s), 0, tCell.MaxLength - 1) Else s = enc.GetString(enc.GetBytes(s), 0, tCell.MaxLength) End If datamodel.SetValue(e.Row, e.Column, s) End If End If Catch End Try SwData = 1 End If End Sub Private Sub FpSpread1_EditModeOn(ByVal sender As Object, ByVal e As System.EventArgs) Handles FpSpread1.EditModeOn If TypeOf (FpSpread1.ActiveSheet.GetCellType(iRow, iCol)) Is FarPoint.Win.Spread.CellType.CurrencyCellType _ Or TypeOf (FpSpread1.ActiveSheet.GetCellType(iRow, iCol)) Is FarPoint.Win.Spread.CellType.NumberCellType Then FpSpread1.EditingControl.ImeMode = Windows.Forms.ImeMode.Off ElseIf TypeOf (FpSpread1.ActiveSheet.GetCellType(iRow, iCol)) Is FarPoint.Win.Spread.CellType.TextCellType Then FpSpread1.EditingControl.ImeMode = Windows.Forms.ImeMode.Hiragana End If End Sub Private Sub FpSpread1_EditChange(ByVal sender As System.Object, ByVal e As FarPoint.Win.Spread.EditorNotifyEventArgs) Handles FpSpread1.EditChange ' 編集中の入力制御 Try ' テキスト型セルの場合 If TypeOf e.View.GetSheetView.GetCellType(e.Row, e.Column) Is CellType.TextCellType Then Dim tCell As CellType.TextCellType = CType(e.View.GetSheetView.GetCellType(e.Row, e.Column), CellType.TextCellType) Dim s As String = e.EditingControl.Text If enc.GetByteCount(s) > tCell.MaxLength Then Dim chrs As Char() = enc.GetChars(enc.GetBytes(s), 0, tCell.MaxLength) If Not Char.IsLetter(chrs(chrs.Length - 1)) Then Array.Resize(chrs, chrs.Length - 1) End If e.EditingControl.Text = String.Concat(chrs) CType(e.EditingControl, CellType.GeneralEditor).SelectionStart = e.EditingControl.Text.Length End If End If Catch End Try End Sub
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2008-08-22 【Visual Studio】Task List的用法
2008-08-22 【FAQ】「この Web ページがクリップボードへアクセスするのを許可しますか?」というダイアログボックスが表示される
2007-08-22 【Excel】取括号之间的数值