วิธีที่จะหา toolstripitem อิงตามชื่อของมันเป็นตัวแปรและจากนั้นเปลี่ยนเช็คค่าของมัน

0

คำถาม

ฉันมี ContextMenuStrip เรียก: DGVContextStrip มันจะถูกแสดงตอนที่ผู้ใช้ถูกต้อลิบของฉัน datagridview.

นั่น MenuStrip มีการเรียกรายการ AddUpgradeTagToolStripMenuItem ซึ่งบรรจุรายการย่อย(dropdownitems)พวกนี้รายการย่อยทุกคนที่ชื่อกับเบอร์โทรศัพท์ในพวกเขาชื่ออะไร eg: Add1ToolStripMenuItem, Add2ToolStripMenuItem, Add3ToolStripMenuItem.... และบนกระทั่ง Add25ToolStripMenuItem.

เมื่อผู้ใช้งานตรงเลยนะ,ที่ Datagridview ฉันอยากจะตรวจสอบว่ามีห้องขับรรจุข้อ"1"แล้วถ้ามันทำให้ Add1ToolStripItem.checked = true

ฉันคิดว่าฉันจะเล่นตัวเลข 1 ต้อง 25 และในแต่ละเรื่องตรวจสอบว่าที่จะบรรจุ 1 และถ้าเรื่องจริงเปลี่ยนเช็คค่าของรายการเมนู. บางอย่างเหมือนกับ...

For i = 1 to 25
  If DataGridView1.SelectedRows(0).Cells("Text_Field").Value.ToString.Contains(i) then
  CType("Add" & i & "ToolStripMenuItem", ToolStripMenuItem).Checked = True

Next

แต่นี่มันไม่ทำงานให้ iv เห็นตัวอย่างออนไลน์ที่ใช้ควบคุมไม่ได้หาวิธีการแต่ฉันไม่สามารถทำให้มันทำงานสำหรับประโยชน์หรอก ตัวอย่างเช่น

Dim ControlName As String = "Add" & i & "ToolStripMenuItem"
CType(Me.Controls.Find(ControlName, True), ToolStripMenuItem).Checked = True

มีความคิดฉันเอานี่ไปทำงาน? ผมตระหนักถึงผมอาจจะใช้ 25 ถ้างั้นก็อีกสอบปากคำแต่ฉันอยากจะเก็บรหัสเท่า neater.

1

คำตอบที่ดีที่สุด

1

คน ToolStripItem ไม่ใช่ควบคุมสำหรับค้นหาหนึ่งใน Control.ControlCollection. คุณต้องการค้นหาเป็น ToolStripItemCollection ไหนของมันด้วย

เหมือนกับค Control.ControlCollection.Find วิธีการที่ ToolStripItemCollection.Find วิธีสามารถแสดงลึกการค้นหาสำหรับรายการ.

ตัวอย่างสำหรับคดีของคุณ:

Dim itemName As String = $"Add{i}ToolStripMenuItem"
Dim tsmi = yourContextMenuStrip.Items.
    Find(itemName, True).
    OfType(Of ToolStripMenuItem).
    FirstOrDefault()

If tsmi IsNot Nothing Then
    tsmi.Checked = True
End If

อีกทางเลือกถ้าคุณรู้อยู่แล้วเป้าหมายรายการเป็นคนหนึ่ง AddUpgradeTagToolStripMenuItem วางลงรายการนั้นคุณสามารถทำอย่าง:

Dim itemName As String = $"Add{i}ToolStripMenuItem"
Dim tsmi = DirectCast(AddUpgradeTagToolStripMenuItem, ToolStripMenuItem).
    DropDownItems.OfType(Of ToolStripMenuItem).
    FirstOrDefault(Function(x) x.Name.Equals(itemName, StringComparison.OrdinalIgnoreCase))

If tsmi IsNot Nothing Then
    tsmi.Checked = True
End If

ในกรณีที่คุณต้องตรวจสอบเพียงหนึ่งรายการจากชุดสะสม:

Dim itemName As String = $"Add{i}ToolStripMenuItem"

For Each tsmi In DirectCast(AddUpgradeTagToolStripMenuItem, ToolStripMenuItem).
    DropDownItems.OfType(Of ToolStripMenuItem)

    If tsmi.Name.Equals(itemName, StringComparison.OrdinalIgnoreCase) Then
        tsmi.Checked = True
    Else
        tsmi.Checked = False
    End If
Next
2021-11-12 18:27:29

ขอบคุณคุณแรกของเธอกตัวเลือกทำงานสำหรับฉัน อันที่จริงฉันไม่สามารถเข้าถึงพาสที่สองใช้ตัวเลือกนี้เพื่อให้งานมันง่ายจะไม่ compile ใจคุณมองเห็นสตูดิโอไม่ได้นึกได้ว่าอะไรเกิดข้อผิดพลาดในการหัสดังนั้นฉันไม่แน่ใจว่าทำไมมันจะไม่ compile.
Andy Andromeda

@AndyAndromeda ยินดีต้อนรับ สำหรับคนที่สองอกตัวเลือกเป็นข้อผิดพลาดฉันไม่รู้ มันได้ผลสำหรับฉัน
dr.null

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่