以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 窗口缩放后,如何让原表列宽同比缩放。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123653)

--  作者:dxjwlf
--  发布时间:2018/8/20 15:01:00
--  [求助] 窗口缩放后,如何让原表列宽同比缩放。
在网上找了一个类似的   但看不懂。

Dim t As Table = Tables("表a")
Dim cs1 As String = "第一列,第二列,第三列"
Dim cs2 As String = "20,50,30"
Dim w As Integer = (t.grid.width-30) / 100                问题: 这里表列宽为什么 要减个30呀
Dim str As String = ""
Dim ary1 = cs1.split(",")
Dim ary2 = cs2.split(",")
For i As Integer = 0 To ary1.length-1
    t.cols(ary1(i)).width = w * ary2(i)
Next

--  作者:有点蓝
--  发布时间:2018/8/20 15:02:00
--  
行号的宽度
--  作者:dxjwlf
--  发布时间:2018/8/20 15:33:00
--  
测试了,不起作用。。我禁用了行号,设置了   显示列。 我的意思是:窗口最大化时,该表格的列宽和表格一样宽,不会留下一处空白区


--  作者:有点蓝
--  发布时间:2018/8/20 15:59:00
--  

SizeChanged事件


Dim lst As new List(of String)


Dim ct As WinForm.Table = e.Form.Controls("Table1")

Dim t As Table = ct.Table

For Each c As Col In t.Cols

    If c.Visible Then lst.Add(c.Name)

Next


Dim w As Integer = (ct.Width-30) / lst.Count

t.SetColVisibleWidth(String.Join("|" & w & "|",lst.ToArray) & "|" & w)


--  作者:dxjwlf
--  发布时间:2018/8/20 16:21:00
--  
谢谢了。这个表格控件真是无语。什么都要自己写代码。为什么不集成一下。

lst.count  count 只是返列宽个数。 这么除什么意思呀


t.SetColVisibleWidth(String.Join("|" & w & "|",lst.ToArray) & "|" & w)   这个好复杂呀。看不懂。知识点在哪里找得到


--  作者:有点蓝
--  发布时间:2018/8/20 16:27:00
--  
http://www.foxtable.com/webhelp/scr/1423.htm
--  作者:dxjwlf
--  发布时间:2018/8/20 16:59:00
--  
Dim w As Integer = (ct.Width-30) / lst.Count  这句话是平均分布各列。  而我想要的是  显示列的宽度,同比例缩放。
--  作者:有点蓝
--  发布时间:2018/8/20 17:27:00
--  
Dim ct As WinForm.Table = e.Form.Controls("Table1")
Dim t As Table = ct.Table
Dim sum As Double = 0
Dim cnt As Integer  =0
For Each c As Col In t.Cols
    If c.Visible Then
        sum += c.Width
        cnt+=1
    End If
Next
If ct.Width > sum Then
    Dim w As Integer = (ct.Width - sum -30)/cnt
    For Each c As Col In t.Cols
        If c.Visible Then
            c.Width = c.Width + w
        End If
    Next
Else
    Dim w As Integer = (sum - ct.Width + 30)/cnt
    For Each c As Col In t.Cols
        If c.Visible Then
            c.Width = c.Width - w
        End If
    Next
End If

--  作者:dxjwlf
--  发布时间:2018/8/20 21:52:00
--  
这个有bug, 那就是列宽在不断变大,比如。60放大后就成了93,缩小在放大 就成了147了。


--  作者:有点蓝
--  发布时间:2018/8/20 22:05:00
--  
请上传实例测试