默认头像
路人甲
路人甲
  • 注册日期2009-03-25
  • 发帖数16
  • QQ
  • 铜币175枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2145回复:3

[请教]VB+MO怎样用legend1的MouseDown事件来在Combo1控件中显示相应图层的字段

楼主#
更多 发布于:2009-04-21 23:45

我在做毕业设计,我是MO 新手

本来我在我手头有一个同学在网上收来的源码

Private Sub legend1_LayerDblClick(Index As Integer) '图例 双击将图层的的字段名加到列表框list1中

Dim ofiled As MapObjects2.Field

Combo1.Clear

For Each ofiled In Map1.Layers(Index).Records.Fields

Combo1.AddItem ofiled.Name

Next

'begin with id num

Combo1.ListIndex = 0

End Sub

是双击事件,可我早已设定了双击legend1控件显示设计图层颜色对话框,就矛盾了!

我把上面得代码加入legend1_MouseDown事件中想碰碰运气,但开始还真管用,单击激活图层就在Combo1中显示了各层相应字段,但点击空白处就出现了错误!!!!!!!!有哪位高手能解决这个问题,能告诉我怎样改进,或把代码贴上来,先谢谢各位了!

喜欢0 评分0
默认头像
路人甲
路人甲
  • 注册日期2008-10-13
  • 发帖数8
  • QQ
  • 铜币132枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2009-04-24 15:20

双击进行图层编辑:

Private Sub legend1_LayerDblClick(Index As Integer)
 Set ActiveLayer = Map1.Layers(Index)
 If ActiveLayer.LayerType = moImageLayer Then
   MsgBox "不能为该类图层建立相应属性!"
   Exit Sub
 End If
 frmedit.Show

End Sub

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2008-10-13
  • 发帖数8
  • QQ
  • 铜币132枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2009-04-24 15:23

以下是frmedit的代码:

Option Explicit

Dim strMarkerStyle(3) As String
Dim strLineStyle(4) As String
Dim strFillStyle(10) As String
Dim lyr As MapObjects2.MapLayer
Dim a As Integer

Private Sub cmdApply_Click()
Call ApplySymbol
lyr.Name = txtLayerName.text
Form1.legend1.LoadLegend
Form1.Map1.Refresh
End Sub

Private Sub cmdCancel_Click()
Unload Form5
End Sub

Private Sub cmdOk_Click()
Call cmdApply_Click
Unload Form5
End Sub

Private Sub Form_Load()
 Set lyr = Form1.ActiveLayer
 txtLayerName = lyr.Name
 strMarkerStyle(0) = "圆形"
 strMarkerStyle(1) = "正方形"
 strMarkerStyle(2) = "三角形"
 strMarkerStyle(3) = "十字"
 strLineStyle(0) = "长线"
 strLineStyle(1) = "短线"
 strLineStyle(2) = "点线"
 strLineStyle(3) = "点划线1"
 strLineStyle(4) = "点划线2"
 strFillStyle(0) = "充实"
 strFillStyle(1) = "透明"
 strFillStyle(2) = "横线"
 strFillStyle(3) = "竖线"
 strFillStyle(4) = "上斜线"
 strFillStyle(5) = "下斜线"
 strFillStyle(6) = "正十字"
 strFillStyle(7) = "斜十字"
 strFillStyle(8) = "亮格网"
 strFillStyle(9) = "格网"
 strFillStyle(10) = "暗格网"
 
Call LoadSingleSymbol
End Sub

Private Sub ApplySymbol()

 Dim sym As MapObjects2.Symbol
 Set sym = lyr.Symbol
 lyr.Name = txtLayerName.text
 Set lyr.Renderer = Nothing
 
 Select Case lyr.shapeType
   Case moShapeTypePoint
     sym.Color = picSSP(0).BackColor
     sym.Style = cboSSP.ListIndex
     
     If IsNumeric(txtSSP.text) Then
       sym.Size = txtSSP.text
      Else
       sym.Size = 5
     End If
   Case moShapeTypeMultipoint
     sym.Color = picSSP(0).BackColor
     sym.Style = cboSSP.ListIndex
     
     If IsNumeric(txtSSP.text) Then
       sym.Size = txtSSP.text
      Else
       sym.Size = 5
     End If
   Case moLine
     sym.Color = picSSP(0).BackColor
     sym.Style = cboSSP.ListIndex
     If IsNumeric(txtSSP.text) Then
       sym.Size = txtSSP.text
      Else
       sym.Size = 1
     End If
   Case moPolygon
     sym.Color = picSSP(0).BackColor
     sym.OutlineColor = picSSP(1).BackColor
     sym.Style = cboSSP.ListIndex
     If IsNumeric(txtSSP.text) Then
       sym.Size = txtSSP.text
      Else
       sym.Size = 1
     End If
     Select Case chkSSP.Value
       Case 1
         lyr.Symbol.Outline = True
       Case 0
         lyr.Symbol.OutlineColor = lyr.Symbol.Color
         lyr.Symbol.Outline = False
     End Select
 End Select
End Sub

Private Sub LoadSingleSymbol()

 Dim i As Integer
 Dim fnt As New StdFont
 
 cboSSP.Clear
 Select Case lyr.shapeType
   Case moShapeTypePoint
     chkSSP.Visible = False
     picSSP(1).Visible = False
     lblSSP(2).Visible = False
     
     txtSSP.text = lyr.Symbol.Size
     lblSSP(3).Caption = "颜色:"
     lblSSP(1).Caption = "大小:"
     For i = 0 To 3
       cboSSP.AddItem strMarkerStyle(i)
     Next
     picSSP(0).BackColor = lyr.Symbol.Color
     cboSSP.text = strMarkerStyle(lyr.Symbol.Style)
     cboSSP.ListIndex = lyr.Symbol.Style
    Case moShapeTypeMultipoint
     chkSSP.Visible = False
     picSSP(1).Visible = False
     lblSSP(2).Visible = False
     
     txtSSP.text = lyr.Symbol.Size
     lblSSP(1).Caption = "大小:"
     For i = 0 To 4
       cboSSP.AddItem strMarkerStyle(i)
     Next
     picSSP(0).BackColor = lyr.Symbol.Color
     cboSSP.text = strMarkerStyle(lyr.Symbol.Style)
     cboSSP.ListIndex = lyr.Symbol.Style
   Case moShapeTypeLine
     chkSSP.Visible = False
     picSSP(1).Visible = False
     lblSSP(2).Visible = False
     
     txtSSP.text = lyr.Symbol.Size
     lblSSP(1).Caption = "线宽:"
     For i = 0 To 4
       cboSSP.AddItem strLineStyle(i)
     Next
     picSSP(0).BackColor = lyr.Symbol.Color
     cboSSP.text = strLineStyle(lyr.Symbol.Style)
     cboSSP.ListIndex = lyr.Symbol.Style
   Case moShapeTypePolygon
     chkSSP.Visible = True
     picSSP(1).Visible = True
     lblSSP(2).Visible = True
     
      If lyr.Symbol.Size = 0 Then
       txtSSP.text = 1
      Else
       txtSSP.text = lyr.Symbol.Size
     End If
     For i = 0 To 10
       cboSSP.AddItem strFillStyle(i)
     Next
     picSSP(0).BackColor = lyr.Symbol.Color
     picSSP(1).BackColor = lyr.Symbol.OutlineColor
     cboSSP.text = strFillStyle(lyr.Symbol.Style)
     cboSSP.ListIndex = lyr.Symbol.Style
     Select Case lyr.Symbol.Outline
       Case True: chkSSP.Value = 1
       Case False: chkSSP.Value = 0
     End Select
 End Select

End Sub

Private Sub picSSP_Click(Index As Integer)
 dlgColor.ShowColor
 picSSP(Index).BackColor = dlgColor.Color
End Sub

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2009-03-25
  • 发帖数16
  • QQ
  • 铜币175枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2009-04-24 17:19

太谢谢楼上!你的代码对我来说绝对是意外的惊喜,本来我以用CommonDialog1做出了双击Legend1弹出颜色对话框的功能但我也不太满意,你的代码我会试试的!谢谢了!但我想要能单击激活图层在Combo1中显示相应激活图层字段的功能!如果有谁能解决这个问题的话我同样感激不尽!

举报 回复(0) 喜欢(0)     评分
默认头像

返回顶部