【问题标题】:Variable depending on Tab focus变量取决于选项卡焦点
【发布时间】:2018-08-23 11:28:37
【问题描述】:

我有一个问题困扰了我很长一段时间,但我无法解决这个问题。

所以我有一个包含 8 个选项卡的程序,当我单击此页面上的按钮时,所有选项卡都使用相同的公式进行计算,但基值取决于选择了哪个选项卡以及单击了哪个按钮

变量 a1 和 a2 是相同的值,访问完全相同的数据库,就像 b1&b2 和 c1&c2 用作组合框一样

Private Sub Calculate() Handles button1.Click
value1 = 0.5 
sum1 = a1.selectedValue*b1.SelectedValue*c1.SelectedValue*value1
textbox1.value = sum1.value

Private Sub Calculate2() Handles button2.Click
value2 = 0.55
sum2 = a1.selectedValue*b2.selectedValue*c2.selectedValue*value2
texbox2.value = sum2.value

有没有什么方法可以通过依赖于焦点的选项卡来创造价值并简化它?喜欢

Private Sub Calculate(sender As Object, e As EventArgs) Handles button1.Click, button2.Click, button3.Click

if tabpage1 is focus then
value = 0.05
elseif tabpage2 is focus then
value = 0.55
end if

if a1 is selected then
a=a1.value
elseif a2.is selected then
a=a2.value
......
endif
.......
sum = a*b*c*value

if tabpage1 is focus then
textbox1.value = sum.value
else
....
endif

?? 我知道上面的代码远非“简单”,实际上每个子中的处理按钮可能是嗯......更好?只是从其他角度来看,仅在一个子项中执行此 8 个选项卡

【问题讨论】:

  • 点击每个选项卡时如何设置值?然后从每个按钮单击中调用一个计算方法。
  • @AndrewMortimer 所以如果我做对了 - 它将是计算并将值返回到焦点选项卡中右侧文本框的函数?
  • 我不确定该建议是否真的有帮助,因为您只是将相同的问题推回SelectedIndexChanged 事件处理程序。您仍然需要根据选择的选项卡来决定从哪些控件中获取数据。

标签: vb.net forms winforms


【解决方案1】:

我建议最好的解决方案是这样的:

Dim selectedTab = TabControl1.SelectedTab
Dim tb = selectedTab.Controls.OfType(Of TextBox)().First()
Dim value = CInt(selectedTab.Tag)

'Use tb and value here.

您只需将每个TabPageTag 属性设置为适当的值,如果每个页面上还有其他TextBoxes 或者它位于另一个容器内,您可能需要调整第二行。每个页面上显然有多个ComboBoxes,因此该部分可能如下所示:

Dim cbs = selectedTab.Controls.OfType(Of ComboBox)().ToArray()
Dim cbb = cbs(0)
Dim cbc = cbs(1)

【讨论】:

  • 所有作品。谢谢你。无论如何 cbb cbc 也无法使用
【解决方案2】:

你可以使用FocusedActiveControlSelectedTab/Index方法作为:

Private Sub Calculate(sender As Object, e As EventArgs) Handles button1.Click, button2.Click, button3.Click
    If sender Is button1 Then '' Button1 is clicked
     If TabControl1.SelectedTab Is tabpage1 Then
     ''   If tabpage1.Focused OrElse Me.ActiveControl Is tabpage1  Then '' Tabpage1 if focused Or Tabpage1 is Active Control
        ''  Your Code 


     End If
    End If
    If sender Is button2 Then '' Button2 is clicked
        If TabControl1.SelectedTab Is tabpage2 Then
        '' If tabpage2.Focused OrElse Me.ActiveControl Is tabpage2 Then '' Tabpage2 if focused or Tabpage2 is Active Control 
        '' Your Code

        End If
    End If
End Sub

【讨论】:

  • 恐怕这是个坏建议。您不会使用FocusedActiveControl,而是使用TabControlSelectedIndexSelectedTab 属性。如果你做对了,就不需要任何If 声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2010-10-19
相关资源
最近更新 更多