【问题标题】:Name of control in routed event路由事件中的控件名称
【发布时间】:2018-06-14 16:06:30
【问题描述】:

有没有办法判断哪个控件触发了路由事件?我有一个 SelectionChangedEvent 供 radgridview 上的组合框使用。我希望该事件中的编码仅处理该组合框而不处理其他组合框。我尝试使用 e.OriginalSource.Name、ToString、sender.ToString、sender.Name 但都返回“”。所以没有办法知道事件正在处理哪个组合框。

创建事件的代码:

Me.AddHandler(RadComboBox.SelectionChangedEvent, New System.Windows.Controls.SelectionChangedEventHandler(AddressOf FinishedEndsChanged))

事件内的代码:

    Private Sub FinishedEndsChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs)
        Try
            If dgChosenItems.SelectedItems.Count > 0 Then
                Dim comboBox As RadComboBox = CType(e.OriginalSource, RadComboBox)

                If comboBox.SelectedValue IsNot Nothing Then
                    Dim endChosen As String = CStr(comboBox.SelectedValue)

谢谢。

【问题讨论】:

  • sender 参数将是触发事件的组合框。所以你可以说If sender Is RadComboBox Then...。我假设您这样做是因为您对一堆组合框使用相同的事件处理程序,但您想要一个特殊情况。更简洁的解决方案是为其提供一个仅用于该组合框的事件处理程序。

标签: wpf vb.net telerik radgridview radcombobox


【解决方案1】:

给你的 ComboBox 一个名字,这样你就可以在源代码后面用这个唯一的名字来处理它。检查

If e.OriginalSource == _youridhere_ Then // If sender == ... should work as well 
    // do what you must 

风格不是很好,可能只有一到几盒才可行...

【讨论】:

  • 它有一个名字:“cboEnds”。但是将该名称插入您建议的位置会出现“预期表达式”错误。
  • @EManning 我对 c# 比较熟悉——你如何创建一个表达式来断言一个对象是否与 VB 中的另一个对象相同? IE。如果sender 是 / == / 等于 cboEnds
  • 我相信我在这里找到了答案:telerik.com/forums/…。我使用了 SelectedValuePath 选项。到目前为止,一切都很好!感谢您抽出宝贵时间回复。
  • @EManning 考虑在 2 天内自行回答并选择该答案。不会给你代表,但可能会帮助你的问题的一些后来访问者
【解决方案2】:

我相信我在这里找到了答案: [https://www.telerik.com/forums/selection-changed-event-for-gridviewcombobox-column]

我选择使用 SelectedValudPath。

感谢 Patrick 抽出宝贵时间回复。

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多