以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何根据相对位置确定其坐标?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=17939)

--  作者:don
--  发布时间:2012/3/29 11:33:00
--  [求助]如何根据相对位置确定其坐标?
  如附件中,如何根据左侧控件及顶上控件的宽及高,确定它的坐标?
  1.[A01]因无左侧控件及顶上控件,则它坐标为(0,0);     
  2. A02左侧为A01,无顶上控件,表示它与左侧控件等高,则它坐标为(300,0);  
  3. A07顶上为A03,无左侧紧控件,表示它与顶上控件等宽,则它坐标为(600,100); 
  4. BBB左侧为A01,顶上为AA1,则它坐标为(300,1800);    
布局如Excel表的下面部分  
   
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:zb.rar
[此贴子已经被作者于2012-3-29 12:46:15编辑过]

--  作者:唐尸三摆手
--  发布时间:2012/3/29 13:31:00
--  

BBB左侧为A01,顶上为AA1,则它坐标为(300,1800);    

坐标有问题吧,是不是应该300,1500


--  作者:唐尸三摆手
--  发布时间:2012/3/29 13:42:00
--  
BBB的坐标貌似有问题,你再看下,自己调整对应代码吧,感觉应该是1500或2000
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:00.table

[此贴子已经被作者于2012-3-29 13:42:44编辑过]

--  作者:don
--  发布时间:2012/3/29 13:46:00
--  
   呵呵,唐兄好!是俺搞錯了,正確的是:A03 ,A07 ,A08, A09 ,A10 ,AA1的高依次為:

       100 ,200 ,300, 400,500, 500

所以BBB的Y坐標應該為: Sum( 100 ,200 ,300, 400,500, 500) = 2000

則為(300,2000)才是

--  作者:唐尸三摆手
--  发布时间:2012/3/29 13:51:00
--  

修正一下代码

Dim dr As DataRow
Dim dt As DataTable = DataTables("坐标")
Dim str As String
Dim Dic As new Dictionary(of String,DataRow)
For Each dr In dt.DataRows
    dic.Add(dr("名称"),dr)
Next
For Each str In dic.Keys
    dr = dic(str)
    If dr.Isnull("左侧控件") AndAlso dr.Isnull("顶上控件") Then
        dr("X坐标") = 0
        dr("Y坐标") = 0
    ElseIf dr.Isnull("左侧控件") = False AndAlso dr.Isnull("顶上控件") Then
        dr("X坐标") = dic(dr("左侧控件"))("X坐标")  + dic(dr("左侧控件"))("宽")
        dr("Y坐标") = dic(dr("左侧控件"))("Y坐标") 
    ElseIf dr.Isnull("左侧控件") AndAlso dr.Isnull("顶上控件") = False Then
        dr("X坐标") = dic(dr("顶上控件"))("X坐标")
        dr("Y坐标") = dic(dr("顶上控件"))("Y坐标") + dic(dr("顶上控件"))("高")
    ElseIf dr.Isnull("左侧控件") = False AndAlso dr.Isnull("顶上控件") = False Then
        dr("X坐标") = dic(dr("左侧控件"))("X坐标") + dic(dr("左侧控件"))("宽")
        dr("Y坐标") = dic(dr("顶上控件"))("Y坐标") + dic(dr("顶上控件"))("高")
    End If
Next

[此贴子已经被作者于2012-3-29 13:51:00编辑过]

--  作者:don
--  发布时间:2012/3/29 14:05:00
--  
OK,多謝老唐!
--  作者:don
--  发布时间:2012/3/29 14:57:00
--  
還有點問題:如輸入沒按順序輸入,則有問題,代碼還須修正.


图片点击可在新窗口打开查看此主题相关图片如下:bb.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2012-3-29 15:00:14编辑过]

--  作者:唐尸三摆手
--  发布时间:2012/3/29 15:16:00
--  

这样再试试

Dim dr As DataRow
Dim dt As DataTable = DataTables("坐标")
Dim str As String
Dim Dic As new Dictionary(of String,DataRow)
For Each dr In dt.Select("","名称")        \'如果有空行,改下条件For Each dr In dt.Select("名称 is not null","名称")
    dic.Add(dr("名称"),dr)
Next
For Each str In dic.Keys
    dr = dic(str)
    If dr.Isnull("左侧控件") AndAlso dr.Isnull("顶上控件") Then
        dr("X坐标") = 0
        dr("Y坐标") = 0
    ElseIf dr.Isnull("左侧控件") = False AndAlso dr.Isnull("顶上控件") Then
        dr("X坐标") = dic(dr("左侧控件"))("X坐标")  + dic(dr("左侧控件"))("宽")
        dr("Y坐标") = dic(dr("左侧控件"))("Y坐标") 
    ElseIf dr.Isnull("左侧控件") AndAlso dr.Isnull("顶上控件") = False Then
        dr("X坐标") = dic(dr("顶上控件"))("X坐标")
        dr("Y坐标") = dic(dr("顶上控件"))("Y坐标") + dic(dr("顶上控件"))("高")
    ElseIf dr.Isnull("左侧控件") = False AndAlso dr.Isnull("顶上控件") = False Then
        dr("X坐标") = dic(dr("左侧控件"))("X坐标") + dic(dr("左侧控件"))("宽")
        dr("Y坐标") = dic(dr("顶上控件"))("Y坐标") + dic(dr("顶上控件"))("高")
    End If
Next

[此贴子已经被作者于2012-3-29 15:19:17编辑过]

--  作者:don
--  发布时间:2012/3/29 15:38:00
--  
唐兄辛苦了!不過我想不能根據名稱排序的.
我的初衷是:大量的控件,不能讓用戶一個一個地確定坐標,想用這個較簡單的相對坐標方法,
用戶只要分別列出控件的寬,高及其左側及上層控件,坐標就能確定下來.

--  作者:狐狸爸爸
--  发布时间:2012/3/29 15:58:00
--  
For Each dr As DataRow In DataTables("坐标").Select("顶上控件 Is Null")
    Dim dr1 As DataRow = dr
    dr1("y坐标") = 0
    Do
        Dim dr2 As DataRow  = DataTables("坐标").Find("顶上控件 = \'" & dr1("名称") & "\'")
        If dr2 IsNot  Nothing
            dr2("y坐标") = dr("y坐标") + dr1("高")
            dr1 = dr2
        Else
            Exit Do
        End If
    Loop
Next
For Each dr As DataRow In DataTables("坐标").Select("左侧控件 Is Null")
    Dim dr1 As DataRow = dr
    dr1("x坐标") = 0
    Do
        Dim dr2 As DataRow  = DataTables("坐标").Find("左侧控件 = \'" & dr1("名称") & "\'")
        If dr2 IsNot  Nothing
            dr2("x坐标") = dr("x坐标") + dr1("宽")
            dr1 = dr2
        Else
            Exit Do
        End If
    Loop
Next