regarmy 发表于 2024-7-22 16:50:01

V17.1列宽的问题

我希望下拉框的宽度和第一列宽度调整同步,可在SpdCol_ColumnWidthChanged事件中,取得的第一个单元格的宽度是上次调整第1列宽度,而不是当次调整第1列的宽度。
    Private Sub SpdCol_ColumnWidthChanged(sender As Object, e As FarPoint.Win.Spread.ColumnWidthChangedEventArgs) Handles SpdCol.ColumnWidthChanged
      Dim Rct As System.Drawing.Rectangle
      If e.View.ActiveSheetIndex = 2 Then
            Rct = SpdCol.GetCellRectangle(0, 0, 0, 0)
            CmbYDE.Left = SpdCol.Left + Rct.Left
            CmbYDE.Width = Rct.Width
            CmbYDE.Top = SpdCol.Top + Rct.Top - CmbYDE.Height
      End If
    End Sub



Richard.Ma 发表于 2024-7-23 11:42:17

我没明白你要干什么,下拉框的宽度本身就是撑满整列的
你具体是要什么效果呢

regarmy 发表于 2024-7-23 11:58:16

本帖最后由 regarmy 于 2024-7-23 12:00 编辑

Richard.Ma 发表于 2024-7-23 11:42
我没明白你要干什么,下拉框的宽度本身就是撑满整列的
你具体是要什么效果呢
我需要在标题行加个下拉框,下拉框的宽度要和列的宽度调整保持动态一致,不过我在ColumnWidthChanged事件中把CmbYDE.Width = Rct.Width改为CmbYDE.Width = CInt(e.View.Sheets(2).Columns(0).Width)解决了。而GetCellRectangle方法在ColumnWidthChanged事件中取得的单元格宽度不是实时的。

Richard.Ma 发表于 2024-7-25 11:35:02

我没太明白为什么你要用GetCellRectangle,实际上在事件中拿到列index,然后
直接获取列宽就行的吧,我测试下来获取到的就是改变后的列宽

fpSpread1.ActiveSheet.Columns.Width;

regarmy 发表于 2024-7-25 11:58:48

Richard.Ma 发表于 2024-7-25 11:35
我没太明白为什么你要用GetCellRectangle,实际上在事件中拿到列index,然后
直接获取列宽就行的吧,我测 ...

是的,已经解决了,用GetCellRectangle是不光取得列宽,主要还需要取得高,不过已经测试GetCellRectangle取得的尺寸数据不是实时的了。

Richard.Ma 发表于 2024-7-25 17:50:47

本帖最后由 Richard.Ma 于 2024-7-25 17:51 编辑

好的,高度现在还有问题吗?按理说,这个事件并不会引起高度变化,所以不至于高度取的不对
页: [1]
查看完整版本: V17.1列宽的问题