Foxtable(狐表)用户栏目专家坐堂 → [求助]如何根据相对位置确定其坐标?


  共有11841人关注过本帖树形打印复制链接

主题:[求助]如何根据相对位置确定其坐标?

帅哥哟,离线,有人找我吗?
don
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
[求助]如何根据相对位置确定其坐标?  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2012/3/29 13:31:00 [只看该作者]

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2012/3/29 13:42:00 [只看该作者]

BBB的坐标貌似有问题,你再看下,自己调整对应代码吧,感觉应该是1500或2000
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:00.table

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

 回到顶部
帅哥哟,离线,有人找我吗?
don
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By: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)才是

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2012/3/29 14:05:00 [只看该作者]

OK,多謝老唐!

 回到顶部
帅哥哟,离线,有人找我吗?
don
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2012/3/29 14:57:00 [只看该作者]

還有點問題:如輸入沒按順序輸入,則有問題,代碼還須修正.


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2012/3/29 15:38:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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

 回到顶部
总数 18 1 2 下一页