winforms 以编程方式创建的发送方窗体中的VB.NET引用控件

oxiaedzo  于 2023-02-05  发布在  .NET
关注(0)|答案(1)|浏览(154)

bounty将在12小时后过期。此问题的答案可获得+50声望奖励。Eduards正在查找规范答案:寻找带有代码和简单错误解释以及如何修复的答案

我试图在sender用户表单中引用一个combobox_projecttype。这是一个以编程方式创建的表单,我将向其中添加句柄

'Declare variables
Dim NewForm_SmartHUB_Projects As New Form_SmartHUB_Projects

With NewForm_SmartHUB_Projects
    .Name = "Form_SmartHUB_" & sender.text & "_" & iNewForm_SmartHUB_Projects
    .Text = sender.text
    AddHandler NewForm_SmartHUB_Projects.Activated, AddressOf DynamicForm_NewForm_SmartHUB_ProjectsActivated
    iNewForm_SmartHUB_Projects +=1
End With

然后潜艇看起来像这样

Sub DynamicForm_NewForm_SmartHUB_ProjectsActivated(ByVal sender As Object, ByVal e As EventArgs)
    Debug.Print(sender.Name)

    strProjectTypeFolderName = sender.combobox_projecttype.selecteditem
End Sub

Debug.Print确实返回了发送者表单的正确名称,但似乎在sender对象中看不到combobox_projecttype
iNewForm_SmartHUB_Projects是一个Long,我只是+ 1每下一次,使不同的名称为每个用户表单。
我做错了什么?如何在以编程方式创建的发件人窗体中引用控件?

qij5mzcb

qij5mzcb1#

strProjectTypeFolderName = CType(DirectCast(sender, Form).Controls.Find("combobox_projecttype_Name", True)(0), ComboBox).SelectedItem

其中“组合框项目类型名称”是您的组合框名称。
您不能直接从发件人访问表单控件(或者我不知道如何访问)。
详细步骤:

Dim Frm As Form = DirectCast(sender, Form)
Dim Ctrl As Control = Frm.Controls.Find("combobox_projecttype_Name", True)(0)
Dim CB As ComboBox = CType(Ctrl, ComboBox)
              
strProjectTypeFolderName = CB.SelectedItem

相关问题