由于项目需要写了如下的VB.NET的代码:
首先在Form_Load事件中设置了FlexGrid的第二列的DataTyle为Long类型,同时设置该列剧中对齐(CenterCenter)代码如下:
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- Me.C1FlexGrid1.Cols(1).DataType = GetType(Long)
- Me.C1FlexGrid1.Cols(1).TextAlign = C1.Win.C1FlexGrid.TextAlignEnum.CenterCenter
- End Sub
复制代码
注意:由于上面代码设置了居中对齐,这会导致FlexGrid在单元格中输入的数字过长时会折行(当前列宽度小,但是输入的数字超过列宽时如果继续输入会折行,在不调整行高的情况下此时看不到上面输入的数字了,很不方便)为了解决输入折行问题在FlexGrid的SetupEditor事件中添加了如下代码:
- Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.SetupEditor
- CType(Me.C1FlexGrid1.Editor, TextBox).Multiline = False
- End Sub
复制代码
上面的代码主要是不让其折行显示(根据我的实验,当列的TextAlign枚举值为CenterXXX或者RightXXX的时候都会折行,其他枚举类型时则不会折行,这是为什么?)
按照上面的代码接下来发现了一个有意思的事情:当前列不折行了,但是当输入的数字位数为1位时,后面的数字不能够替代前面的数字,例如,第一次我在单元格上输入一个数字“1”,焦点离开之后
我再次点击该单元格输入一个数字“2”,此时焦点再离开后,该单元格仍然显示1,原先输入的“2”没有了。总之只要是输入一位的数字,后面输入的不能够替换掉第一次输入的。
但是更有意思的是如果我输入的数字位数为2位或者更多时就不会存在这个问题了,输入“11”就可以替换掉原来的1了。
目前我做的项目由于此问题产生了较大范围的BUG,所以想确认一下
1:这个现象是不是FlexGrid的BUG?
2:我如果想实现上面所写的功能(数值类型列,居中对齐显示,输入时不折行)有没有其他更好的办法? |
|