hardwired 发表于 2008-4-1 07:17:22

布局和列表框以及其他L字。

嗨,
在一个新程序上,我有一个列表框,它由当前绘图的布局填充,该程序的要点是向标题块添加/编辑修订数据...
我运行它以更新当前布局,但现在添加列表框后,我想要的是让用户从列表框中选择所需的布局,所以可能是一个、三个、所有等...
这些是我卡在上面的点点滴滴,所以非常感谢任何帮助:
1:我如何对其进行编码以找出用户选择的布局,然后仅循环这些以更新标题块?
2:我想要一个
Select All
复选框-那么我如何对其进行编程以选择列表框中的所有条目...
3:当表单第一次加载时,我希望当前布局是列表框中唯一选定的条目,同样,如果用户取消选中
Select All
复选框,我希望它只恢复到选定的当前布局...
谢谢...
**** Hidden Message *****

Keith™ 发表于 2008-4-1 08:44:24

列表框因使用起来有点固执而臭名昭着。还行。。不是固执,而是有点不直观。
为了能够在列表框中选择多个项目,请将多选属性设置为frmMultiSelectMulti (1)
要确定选择了哪些项目,您需要遍历列表框并选中每个项目
Private SelectedLayouts() As String
Private Sub ListBox1_Change()
    Dim X As Integer
    ReDim SelectedLayouts(0)
'loop through the listbox
    For X = 0 To ListBox1.ListCount - 1
'if an item is selected
      If ListBox1.Selected(X) = True Then
'then increment our array and add it to the array
            ReDim Preserve SelectedLayouts(UBound(SelectedLayouts) + 1)
            SelectedLayouts(UBound(SelectedLayouts)) = ListBox1.List(X)
      End If
    Next X
End Sub

现在您有一个数组,其中包含所有选定的布局
SelectedLayouts() 变量定义应放置在表单的声明部分中,以便它全局可用于表单的其余部分。
现在,使用复选框选择列表框中的所有项目。
Private Sub CheckBox1_Click()
Dim X As Integer
For X = 0 To ListBox1.ListCount - 1
    ListBox1.Selected(X) = CheckBox1.Value
Next X
End Sub

干杯

hendie 发表于 2008-4-1 08:51:40

您应该知道,用于过滤布局的dxf代码410在VBA中不起作用

Keith™ 发表于 2008-4-1 09:10:57

啊...忘了那个小花絮

hardwired 发表于 2008-4-1 10:10:36

基思,你是个传奇,你似乎每次都帮我,谢谢。
右手得到了选择所有的东西,现在得到了slected项的数组,但现在从这里,我如何使用此数组遍历布局。我确实有:
Dim Cx as Integer
For Cx = LBound(SelectedLayouts) To UBound(SelectedLayouts) - 1
   ThisDrawing.ActiveLayout = SelectedLayouts(Cx)
   ' blah blah blah code for revising stuff blah blah..
next Cx
显然对于Cx = LBound(SelectedLayouts)到UBound(SelectedLayouts) - 1只是循环遍历字符串值,所以我如何将它们传递给布局。我以为ThisDrawing.ActiveLayout = SelectedLayouts(Cx)行会这样做,但我得到了一个类型不匹配的错误。

Keith™ 发表于 2008-4-1 10:21:18

好的..几个提示...
除非使用鼠标从屏幕上以图形方式选择对象,或者使用坐标以编程方式选择对象,否则不需要设置ActiveLayout。我怀疑您想以编程方式完成它,并且可以通过选择合适的块来修改属性。
如果您确实需要设置ActiveLayout,您将需要传递布局对象,而不仅仅是名称..为了做到这一点...
ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(SelectedLayouts(Cx))

现在,假设您将在每个布局上选择标题栏。为此,您只需获取图形中所有标题栏的集合,并根据它们所在的布局对它们进行过滤。正如亨迪提到的,这有点棘手..在VBA没有用于布局的过滤器...因此,您必须实际检查已选择的每个块参照的布局特性。

hardwired 发表于 2008-4-1 10:39:01

我在 ThisDrawing.ActiveLayout = ThisDrawing.Layouts.Item(SelectedLayouts(Cx))行上收到一个
Key Not found
错误。
是的,如果可以的话,我确实想在不循环布局的情况下访问标题块,并且不会太难。到目前为止,我通过物理循环遍历每个布局来更新这些块上的标题块和属性的所有内容,但有时由于再生时间,这可能非常耗时。如果我无法在VBA中过滤布局,该怎么办?

hendie 发表于 2008-4-1 10:50:05

检查局部变量窗口中所选布局(Cx)的值...你绝对使它全球化,不是吗?
你可以在vba中过滤布局,你不能使用410 dxf代码,这使得它更加复杂

Keith™ 发表于 2008-4-1 10:58:14

问题在于,在我提供的代码中(以及您随后使用的代码中),我用0初始化了SelectedLayouts,然后从0开始递增。我这样做的原因是因为计数不是基于零的。也就是说,布局#3=SelectedLayouts(3)…您应该从LBound(SelectedLayouts)+1开始循环,并在UBound(SelectedLayoutes)结束循环…或者,您可以修改我提供的代码,开始存储在索引0而不是索引1

hardwired 发表于 2008-4-1 12:16:12

Brilliant Keith,非常感谢现在几乎在那里,只需要整理出在列表框中突出显示当前布局(程序在运行时进入纸质空间) - 我该如何实现?
页: [1] 2
查看完整版本: 布局和列表框以及其他L字。