Получить динамическое имя тега UserControl VB.NET - PullRequest
0 голосов
/ 03 июня 2018

Проблема: я пытаюсь получить имя тега динамически созданного пользовательского элемента управления с помощью кнопки внутри созданного элемента управления. снимок экрана, чтобы понять

Я пробовал следующий код, чтобыполучить имя тега:

Private Sub DownloadViewDelClick(sender As Object, e As EventArgs)
    Dim i As Integer = downloadContainer.Controls.Count - 1
    While i >= 0
        If downloadContainer.Controls(i).Tag = sender Then
            MsgBox(downloadContainer.Controls(i).Tag)
        End If
        i -= 1
    End While
End Sub

Следующий код для создания динамических элементов управления:

 Sub create_download_list()
    Dim counter As Integer = 0
    Dim downloadview As New videoviewcontrol
    For Each link As String In downloadList
        AddHandler downloadview.btnDel.Click, AddressOf Me.DownloadViewDelClick
        downloadview.Tag = "downloadview" & counter
        downloadview.TextBox1.Text = link
        downloadContainer.Controls.Add(downloadview)
        counter += 1
    Next
End Sub

Когда я запускаю приложение и нажимаю кнопку корзины на любом динамическом элементе управления, яполучить следующую ошибку:

 System.InvalidCastException
  HResult=0x80004002
  Message=Overload resolution failed because no Public '=' can be called with these arguments:
    'Public Shared Operator =(a As String, b As String) As Boolean':
        Argument matching parameter 'b' cannot convert from 'Button' to 'String'.
  Source=Microsoft.VisualBasic
  StackTrace:
   at Microsoft.VisualBasic.CompilerServices.OverloadResolution.ResolveOverloadedCall(String MethodName, List`1 Candidates, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, BindingFlags LookupFlags, Boolean ReportErrors, ResolutionFailure& Failure)
   at Microsoft.VisualBasic.CompilerServices.Operators.ResolveUserDefinedOperator(UserDefinedOperator Op, Object[] Arguments, Boolean ReportErrors)
   at Microsoft.VisualBasic.CompilerServices.Operators.InvokeObjectUserDefinedOperator(UserDefinedOperator Op, Object[] Arguments)
   at Microsoft.VisualBasic.CompilerServices.Operators.InvokeUserDefinedOperator(UserDefinedOperator Op, Object[] Arguments)
   at Microsoft.VisualBasic.CompilerServices.Operators.ConditionalCompareObjectEqual(Object Left, Object Right, Boolean TextCompare)
   at Bhavesh_YouTube_Downloader.mainWindow.DownloadViewDelClick(Object sender, EventArgs e) in C:\Users\TP043287\source\repos\Bhavesh YouTube Downloader\Bhavesh YouTube Downloader\mainWindow.vb:line 28
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
   at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
   at Bhavesh_YouTube_Downloader.My.MyApplication.Main(String[] Args) in :line 81

Ниже приведено значение $ исключение на вкладке 'locals' в окне выходной трассировки:

+       $exception  {"Overload resolution failed because no Public '=' can be called with these arguments:" & vbCrLf & "    'Public Shared Operator =(a As String, b As String) As Boolean':" & vbCrLf & "        Argument matching parameter 'b' cannot convert from 'Button' to 'String'."}   System.InvalidCastException

Я пытался понять эту проблему, но исключенияПриведенное выше значение означает, что кнопка «b» не может быть преобразована в строку, и у меня нигде нет кнопки с именем «b».Буду признателен за решение.Извините за вопрос нуб .. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...