crwncad702 发表于 2022-7-6 22:59:01

VB .Net - 选择过滤器

在这里需要一些帮助,以确保我不会在这里发疯或发信息。
暗淡[ /font] mytypedvalue(7) As [ size=2]TypedValue
mytypedvalue(0) = [ /size]新 TypedValue[ /color] (DxfCode[ /size].Operator,"<or" )
mytypedvalue(1) = 新 TypedValue(DxfCode[ /color].Operator,"<and" )
mytypedvalue(2) = 新 TypedValue(0, "TEXT"[ /font])[/大小][/字体]
mytypedvalue(3) = 新 TypedValue(DxfCode[ /color].Operator,"and>" )
mytypedvalue(4) = 新 TypedValue(DxfCode[ /color].Operator,"<and" )
mytypedvalue(5) = 新 TypedValue(0, "MTEXT"[ /font])[/大小][/字体]
mytypedvalue(6) = 新 TypedValue(DxfCode[ /color].Operator,"或>" )
mytypedvalue(7) = 新 TypedValue(DxfCode[ /color].Operator,"and>" )
暗淡 myfilterAs新SelectionFilter(mytypedvalue)[/字体]
暗淡 mypromptres As[ /font]PromptSelectionResult = myeditor.GetSelection(myfilter)
如果 IsNothing(mypromptres.Value) = 假然后
For每个[ size=2] myobjidAsObjectId In mypromptres.Value.GetObjectIds [/字体]GetObjectIdsGetObjectIds
暗淡 myobjent As[ /font]实体 = myobjid.GetObject( OpenMode[ /font].ForRead)
暗淡 myobjtxt As[ /font]DBText = myobjent
下一个
结束如果
当我尝试将运算符与我的过滤器一起使用时,它根本不起作用,但如果我将过滤器限制为单个项目,它会很好用。我知道我还需要添加某种语句来确定每个项目是多行文本还是文本,但我不认为那是我出错的地方,或者是吗?

Kerry Brown 发表于 2022-7-6 23:07:29

首先,

您的列表中有多少元素...... 7 或 8 ?



第二



您可以将 OR 选择组合到一个列表中。

就像是

TypedValue[] filterList = { new TypedValue( 0 , "Mtext,Text") };



^^ 那是 C# 因为我不做 vb。





顺便说一句:

编译时是否收到错误消息?

您是否尝试调试您发布的代码?

在 Locals 窗口打开的情况下单步执行代码 ??

SEANT 发表于 2022-7-6 23:14:13

另外,这个:

Dim myfilter AsNewSelectionFilter(mytypedvalue)


应该这样:


Dim myfilter As SelectionFilter = New SelectionFilter(mytypedvalue)

crwncad702 发表于 2022-7-6 23:28:53

太好了...将它们组合成一个单品就像一种魅力。


Dim apn_tv(0) AsTypedValueapn_tv(0) = NewTypedValue(0, "TEXT,MTEXT")

现在就元素总数而言,有 8 个,但我认为你必须从 0 开始?正如您在上面的新代码中看到的那样,它使用 0 并且工作正常。另外,我确实尝试过进行一些调试,但出于某种奇怪的原因,c3d 2011 和 vs2010 的组合不允许我中断或类似的事情。


@SEANT - 感谢您的提醒......我被限制在 18k 字符并且不得不遗漏一些代码,但我确实按照你的建议进行了调整......从我所看到的两种方式都可以工作......?现在确定该项目是多行文本还是文本

crwncad702 发表于 2022-7-6 23:31:58

哦,顺便说一句,SEANT,在回顾了我的代码和参考资料后,我发现我已经像我一样设置它只是因为我参考的书使用了这种方法(Jerry Winters 最新的 VBCAD 书)......我总是开始有一种方法可以完成我正在做的事情,因为我在其他解释我试图完成的项目的书籍上运气不佳

Kerry Brown 发表于 2022-7-6 23:41:02

元素计数在 VB 和 C# 中的命名方式不同



VB 使用

(0) 声明1个元素

(1) 声明2个元素



C# 使用数组长度,与 myArray.Length() 的值相同

IE

(5) 声明5个元素



希望澄清我的评论。

Kerry Brown 发表于 2022-7-6 23:51:01

在这里查看一些想法。代码有点旧,但讨论是相关的。

SEANT 发表于 2022-7-6 23:55:59

确实如此。很高兴知道。



我看到原始帖子中的格式有点不对劲,并认为“=”可能在“复制和粘贴”操作中被遗漏了。

crwncad702 发表于 2022-7-7 00:00:23

自 2003 年以来一直是 theswamp 的成员......大约比你早一个月:D......帮助马克先生到处做一些事情......我真的很讨厌暴风雨,马克会失去力量和沼泽不过:)那是不久前的事了。我想我还欠他几杯啤酒。

无论如何,我最终通过我的 mtext/text 确定采取了简单的路线:


IfTypeOf myent IsDBTextThenElseIfTypeOf myent IsMTextThenEndIf

页: [1]
查看完整版本: VB .Net - 选择过滤器