dbroada 发表于 2022-7-6 22:22:28

VB。将子公司净投入形式ev

标题太长了。我希望这是一个简单的问题,我只是忽略了显而易见的。然而,继续我的其他帖子,你知道我在VB中艰难前行。Net的帮助下,杰瑞温特斯的书。就目前而言,一切都很好。。。。
 
我正试图重写我们的VBA例程,但虽然我已经准备好了大部分组件,但我不知道如何将它们粘在一起。
 
常规。。。。
我有一个带有组合框、列表、标签和命令按钮的表单。
组合框显示图层列表。
该列表列出了选定图层上的所有文字图元。
标签显示选定图层上的文字图元数。
该按钮将列表导出到文本文件。
(文本文件提供给我们的面板生成器,用于创建热缩导线末端标记。)
 
组合框填充很容易。
我没有对列表总体进行排序,但使用当前用于标签计数的选择集应该不会有问题(昨天的问题-现在已排序)。
 
我想要的是,当组合框更改时,我的列表和标签会更新。然而,选择集在我的类定义中,组合框更改在form类中。我看不到从组合框更改的事件传递到类中的子事件的方法。如果我将选择集子对象放入form类中,它不喜欢调用编辑器。
 
我错过了什么?

BlackBox 发表于 2022-7-6 22:31:45

 
我相信这就是你想要的,戴夫:
 

Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       ComboBox1.SelectedIndex = 0

   End Sub

   Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

       Dim comboBox As ComboBox = CType(sender, ComboBox)

       Label1.Text = CType(comboBox.SelectedItem, String)

   End Sub

End Class

BlackBox 发表于 2022-7-6 22:37:01

 
很难说,尤其是没有代码。。。你能发一个片段吗?听起来您好像遇到了权限问题,但同样,不确定您在非表单类中尝试做什么。需要更多信息。

dbroada 发表于 2022-7-6 22:39:22

谢谢BB。再一次,我将不得不离开这一段时间,因为真正的工作和半天的休息将阻止我看它。我会尝试和张贴代码后,它已经整理好。今天需要进行一些剪切和粘贴,需要恢复。

BlackBox 发表于 2022-7-6 22:49:07

 
一如既往,欢迎你;我很乐意帮助。。。至于切割+粘贴,“手术”总是很痛苦,现在比以后好。
 
享受你的半天。

dbroada 发表于 2022-7-6 22:50:09

这并没有像预期的那么长时间。(仍然没有看你的thoguh)。
 
我的代码。。。
该位加载带有层名称的组合框,并显示Form1

PublicSub ExportFerrules()
Dim i AsInteger = 1
Dim myForm AsNew Form1
Dim myDB As Database = HostApplicationServices.WorkingDatabase
Using myTrans As Transaction = myDB.TransactionManager.StartTransaction
Dim myLT As LayerTable = myDB.LayerTableId.GetObject(OpenMode.ForRead)
ForEach myOID As ObjectId In myLT
Dim myLTR As LayerTableRecord = myOID.GetObject(OpenMode.ForRead)
myForm.ComboBox1.Items.Add(myLTR.Name)
If UCase(myLTR.Name) = "FERRULES"Then i = myForm.ComboBox1.Items.Count
Next
myForm.ComboBox1.SelectedIndex = i - 1
EndUsing
Dim j AsInteger = 0
Dim LayNm AsString = myForm.ComboBox1.Items(i - 1)
Call TextOnLayer(j, LayNm)
myForm.Label2.Text = j
SelectCase Application.ShowModalDialog(myForm)
Case System.Windows.Forms.DialogResult.OK
MsgBox("Hello")
Case System.Windows.Forms.DialogResult.Cancel
MsgBox("Do Nothing.")
EndSelect
EndSub

 
该位统计由组合框指定的层上的文本对象数。

PublicSub TextOnLayer(ByRef j, ByRef LayNm)
'Add bit about counting text on layer
'This has gone back in to the load stage for now.
Dim myEd As Editor = DocumentManager.MdiActiveDocument.Editor
Dim myTVs(3) As TypedValue
myTVs.SetValue(New TypedValue(DxfCode.Operator, "<AND"), 0)
myTVs.SetValue(New TypedValue(DxfCode.Start, "TEXT"), 1)
myTVs.SetValue(New TypedValue(DxfCode.LayerName, LayNm), 2)
myTVs.SetValue(New TypedValue(DxfCode.Operator, "AND>"), 3)
Dim myFilter AsNew SelectionFilter(myTVs)
Dim myPSR As PromptSelectionResult = myEd.SelectAll(myFilter)
If myPSR.Status = PromptStatus.OK Then
Dim mySS As SelectionSet = myPSR.Value
j = mySS.Count
EndIf
EndSub

EndClass

 
这个位告诉你组合框有一个新的选定层
 

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
MsgBox(ComboBox1.SelectedItem)
End Sub

 
我希望能够从组合框“IndexChanged”代码中调用“TextOnLayer”sub,但它们似乎是互斥的。

dbroada 发表于 2022-7-6 22:59:10

我可以让它做我想做的事
 
但只需要从类中复制所有导入。vb模块转换为Form1。vb模块。这肯定不是正确的方式吗?

BlackBox 发表于 2022-7-6 23:03:35

据我所知,项目/解决方案中的每个类文件(即vb、cs等)都需要依赖导入(在C#中使用)语句,以便在不限定命名空间的情况下引用类型名。

dbroada 发表于 2022-7-6 23:08:47

谢谢,我觉得可能很简单。只是看起来不对。

BlackBox 发表于 2022-7-6 23:15:26

 
可能但是,当你编写的代码比“hello world”多时,它(使用Imports语句)确实节省了大量的输入。
 
将其与进行比较:
 
。AutoCAD。伪代码。SampleWithImports公共类命令_PublicSub SampleWithImports()Dim doc AsDocument=应用程序。DocumentManager。MdiActiveDocument变暗为编辑器=文档。编辑ed.WriteMessage(vbLf和“**领结很酷**”和vbLf)结束子[颜色=“绿色”]“”
页: [1] 2
查看完整版本: VB。将子公司净投入形式ev