Member 12374312 Ответов: 2

Могу ли я получить доступ к элементам управления формами из библиотеки классов VB .NET


Я использую библиотеку классов в vb 2010 для создания пользовательского элемента управления textbox.
я пытаюсь добавить список компонентов управления, которые находятся в основной форме
к свойству текстового поля ,
когда я добавляю новое текстовое поле (мое пользовательское текстовое поле) в форму мне нужен класс, чтобы получить компонент формы like (AxComms, Labels, ... etc) и иметь дело с этим компонентом из моего класса (my custom textbox),
например, получить его имя, как я попытался ниже "CXComm = Comms.Name" перед запуском приложения
как раз тогда, когда я опускаю пользовательское текстовое поле в форму.

Я трезубец код ниже на sub new но "
Application.OpenForms.Item(0)
"просто работайте и получайте открытые формы, когда приложение запущено.
и так далее я не могу получить доступ к компонентам управления формами

Что я уже пробовал:

Imports System.Windows.Forms
Imports System.IO
Imports System.ComponentModel
Imports System.Drawing
Imports CXSERVERCOMMUNICATIONSCONTROLLib

Imports System.Drawing.Drawing2D

Public Class Fit_TextBox

    Inherits System.Windows.Forms.TextBox

    Public Comms As New AxCXSERVERCOMMUNICATIONSCONTROLLib.AxComms

    Dim CommsInForm As AxCXSERVERCOMMUNICATIONSCONTROLLib.AxComms

    Dim curColor As Color
    Dim lastData As Single
    Dim MaxValue As Decimal
    Dim MinValue As Decimal
    Dim FactorVal As Decimal = 1
    Dim mainToolTip As String
    Dim txtval As String
    Dim FormName As String = "frmMain"
    Dim pnlName As String = "Panel1"
    Dim CXComm As String = "AxComms1"
    Dim tagname As String = "Tag"
    Dim plcName As String = "PLC"

    Dim ErrorProvider1 As New System.Windows.Forms.ErrorProvider

    Public x As TextBox

    Dim Error_Bit As Boolean = False

    Dim frm As Form
    Dim toolTip1 As New ToolTip()
    Dim lbl As Label
    Dim txt As TextBox
    Dim pnl, pnlC As Panel

    Dim Highlighter1 As New DevComponents.DotNetBar.Validator.Highlighter



    Public Sub New()

        '******************** Get Project Form and Comms Control Component
        frm = Application.OpenForms.Item(0)
        For Each c As Control In frm.Controls
            If InStr(c.Name, "AxComms1") Then
                Comms = c
                CXComm = Comms.Name
            End If
        Next
    End Sub

' ============================ Property ========================
Property Comms_In_Form As AxCXSERVERCOMMUNICATIONSCONTROLLib.AxComms
        Get
            'Comms.Name
            Return CommsInForm
        End Get
        Set(value As AxCXSERVERCOMMUNICATIONSCONTROLLib.AxComms)
            CommsInForm = value
        End Set
    End Property

    Property CX_Comms As String
        Get
            'Comms.Name
            Return CXComm
        End Get
        Set(value As String)
            CXComm = value
        End Set
    End Property

' ================================== Events ==============
  Private Sub Class1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        Dim err As Boolean = False
        If (Me.Text = "") Then GoTo lblErr

        If e.KeyValue = 27 Then
            Me.Refresh()
            Me.Text = lastData
            pnl.Focus()
            Exit Sub
        End If

        If e.KeyValue = 13 Then


            ' ***************** Check if numeric value
            If Not IsNumeric(Me.Text) Then
                ErrorProvider1.SetError(Me, "Not Numeric Number")
                HighLighter_Sub(True)
                err = True
                GoTo lblErr
            End If

            ' ***************** Check minimum and maximum value
            If Max_Value <> 0 Or Min_Value <> 0 Then
                If Me.Text < Min_Value Then
                    ErrorProvider1.SetError(Me, "Exceeds Min Limit '" & MinValue & "'")
                    HighLighter_Sub(True)
                    err = True
                    GoTo lblErr
                End If

                If Me.Text > Max_Value Then
                    ErrorProvider1.SetError(Me, "Exceeds Max Limit '" & Max_Value & "'")
                    HighLighter_Sub(True)
                    err = True
                    GoTo lblErr
                End If
            End If

            ' ***************** Write data to PLC 
            frm.Comms.Write("CJ1M", tagname, Me.Text * Factor)
            lastData = Me.Text
            pnl.Focus()
        End If
lblErr:
        If Not err Then
            toolTip1.SetToolTip(Me, mainToolTip)
            HighLighter_Sub(False)
            ErrorProvider1.SetError(Me, "")
        Else
            Error_Bit = True
        End If

    End Sub

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли.
И на данный момент это не имеет большого смысла без контекста, который у вас есть, а у нас нет!
Возможно, если вы попытаетесь объяснить более подробно, что вы делаете и какие проблемы это вызывает у вас, это поможет?
Используйте виджет" улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

2 Ответов

Рейтинг:
4

Member 12374312

Я пробовал это и его работа хорошо

Public Sub New()
     frm = Application.OpenForms.Item(0)
     For Each c As Control In frm.Controls
          If (c.GetType.ToString = "TextBox") Then
              txtControl = c
          End If
     Next
End Sub


Рейтинг:
2

urikoth

Привет, вы пробовали передать необходимые элементы управления вызывающей функции в файле класса в качестве параметра?