как получить доступ к различным формам через цикл и изменить текст метки в vb.net - PullRequest
0 голосов
/ 31 октября 2011

Я сделал приложение vb.net, которое имеет 63 формы.На каждой форме label2 должно быть указано имя пользователя с помощью приложения.Первая форма, отображаемая пользователю, это форма входа в систему.Когда пользователь нажимает кнопку входа в эту форму, имя пользователя во всех вновь открытых окнах должно появляться внутри label2.Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 31 октября 2011

Если дизайн не требует метки в каждой форме, вы можете рассмотреть возможность использования формы, которая является контейнером MDI, в качестве основной формы, добавления строки состояния в нижней части этой формы и сохранения имени пользователя в одной из поля строки состояния.

Таким образом, пользовательская информация доступна в одном месте, о котором пользователь знает, вы не занимаетесь ценной недвижимостью экрана с меткой, и вам не нужно беспокоиться о новых формах.

Если дизайну нужен ярлык в каждой форме, тогда вам лучше всего создать базовый класс, от которого наследуется каждая из форм. Во время события формы Load вы можете использовать метод Find в коллекции Controls формы, чтобы найти метку, содержащую имя пользователя, и задать ее (предполагается, что все метки имеют одно и то же имя).

Например:

Dim oLabel As Label

oLabel = TryCast(Me.Controls.Find("label2", True), Label)

If oLabel IsNot Nothing Then
  oLabel.Text = globalusername
End If
0 голосов
/ 31 октября 2011

A. Я полностью согласен с aKzenT в отношении присвоения имен вашим элементам управления последовательным и легко узнаваемым образом. Одним из преимуществ наших современных быстрых машин является то, что мы можем использовать описательные имена в нашем коде для переменных и классов. : -)

B. Есть много способов решить вашу проблему. Хотя прохождение всех 63 форм является одной из них, она едва ли является самой эффективной, эффективной или, опять же, ремонтопригодной в будущем.

C. Не уверен, как вы обрабатываете свой логин, поэтому я не уверен, что произойдет после того, как пользователь нажмет OK в вашей форме входа. Вы настроили свою собственную обработку входа в систему или используете встроенную аутентификацию?

грамотный_технолог находится на правильном пути, предлагая наследование. Сделав еще один шаг вперед, вы можете использовать функцию My.Application для хранения вашей глобальной переменной. Перейдите в окно свойств вашего проекта / Приложение / Просмотр событий приложения. Вы увидите следующий файл кода. Добавьте указанный код:

Namespace My

    Partial Friend Class MyApplication


        'Add THIS code block:
        Private _CurrentUserName As String = "Current User"
        Public Property CurrentUserName() As String
            Get
                Return _CurrentUserName
            End Get
            Set(ByVal value As String)
                _CurrentUserName = value
            End Set
        End Property

    End Class

End Namespace

Теперь ваша форма входа может установить переменную приложения следующим образом:

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    My.Application.CurrentUserName = Me.UsernameTextBox.Text
    'YOUR LOGIN CODE HERE . . .
    Me.Close()
End Sub

Не создавайте класс в модуле My.Application. Использовать проект / добавить / новый класс Затем создайте НОВЫЙ класс (НЕ внутри модуля My.ApplicationEvents!), Который наследуется от System.Windows.Forms.Label, следующим образом:

Public Class MyUserLabel
    Inherits System.Windows.Forms.Label

    Public Sub New()
        Me.Text = My.Application.CurrentUserName
    End Sub
End Class

Вам нужно будет построить проект, прежде чем элемент управления MyUserLabel станет видимым на панели инструментов. После того, как вы создадите, элемент управления будет доступен для вас, чтобы перетащить на ваши формы. Или вы можете использовать Find / REplace с областью действия, установленной на «весь проект». Замените "label2" на "MyUserControl"

Приведенный выше код заставит экземпляры MyUserLabel установить для свойства .Text для каждого экземпляра значение, представленное переменной My.Application.CurrentUser при инициализации (даже в режиме разработки).

Затем замените Label2 на всех ваших формах на MyUserLabel (вы, вероятно, могли бы сделать это с помощью Find и заменить область действия для всего проекта).

Надеюсь, это поможет.

Вот код:

       Namespace My

' The following events are availble for MyApplication:
' 
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication

    'Add THIS code block:
    Private _CurrentUserName As String = "Current User"
    Public Property CurrentUserName() As String
        Get
            Return _CurrentUserName
        End Get
        Set(ByVal value As String)
            _CurrentUserName = value
        End Set
    End Property
    Public Class MyUserLabel
        Inherits System.Windows.Forms.Label

        Public Sub New()
            Me.Text = My.Application.CurrentUserName
        End Sub
    End Class


End Class

Конечное пространство имен

0 голосов
/ 31 октября 2011

Прежде всего, я настоятельно рекомендую изменить имена ваших элементов управления и надписей на что-то более удобное в будущем, например userLabel.

Edit:

При отображении формы входа в систему у вас не открываются другие окна, поэтому для вашего приложения они не существуют (пока), и, следовательно, вы не можете просмотреть их или изменить состояние.

Поскольку у вас большое количество форм, вы должны попытаться найти решение, не требующее большого количества повторяющегося кода. Другие предложили окна MDI, которые могут быть решением. Другим решением будет создание пользовательского элемента управления для входа в систему.

Такой пользовательский элемент управления создать несложно. Вы можете стилизовать его так, как хотите, и даже добавить больше функциональности позже, когда это необходимо (например, ссылка для выхода из системы). В событии Load этого пользовательского элемента управления вы можете получить зарегистрированное имя пользователя (через статическое свойство или другой механизм) и отобразить его внутри.

При этом единственное, что вам нужно сделать, это поместить этот пользовательский элемент управления во все формы, в которых должно отображаться имя пользователя, а все остальное работает автоматически. Для получения справки о том, как создавать пользовательские элементы управления, в Google есть много учебников, и это в основном похоже на создание формы.

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