VB.NET, как проверить, существует ли форма?

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

Я пытался проверить это по словарю, но не смог заставить его работать..

Dim convs As New Dictionary(Of String, String)
Dim nf As New FrmDialog()


convs.Add(WritePUser, WritePMessage)
nf.Show()

If convs.ContainsKey(WritePUser) Then
    MsgBox("im already open")
Else
    nf.Show()
End If

Во-первых, просмотрите предварительный просмотр вашего вопроса и не отправляйте его, если форматирование некорректно. Сначала я просмотрел ваш вопрос на телефоне и, благодаря бессмысленному куче пробелов в начале, я смог прочитать ваш код, не прокручивая его в сторону. Не усложняйте чтение вашего вопроса без уважительной причины.

jmcilhinney 29.03.2024 06:01

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

xeno 29.03.2024 19:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Трудно понять, находится ли опубликованный вами код в одном месте вашего приложения или в нескольких, но нет смысла объявлять и создавать Dictionary там, где вы его используете. Если вы это сделаете, вы будете каждый раз создавать новую Dictionary и никогда не сможете увидеть ранее созданные формы. Вам нужно создать его Dictionary и присвоить его полю, то есть переменной уровня класса. Затем вы используете этот единственный Dictionary каждый раз. Значения в Dictionary также должны быть формами, а не Strings, чтобы вы могли получить доступ к существующей форме. Вам также необходимо либо удалить формы из Dictionary, когда они закрываются, либо проверить, удалена ли существующая форма. Последнее, вероятно, является более простым вариантом.

Private dialoguesByUserName As New Dictionary(Of String, FrmDialog)

Затем:

Dim dialogue As FrmDialog

If Not dialoguesByUserName.TryGetValue(userName, dialogue) OrElse
   dialogue.IsDisposed Then
    'Either there is no existing form or the existing form has been closed.
    dialogue = New FrmDialog
    dialoguesByUserName[userName] = dialogue
    dialogue.Show()
Else
    'Focus the existing form.
    dialogue.Activate()
End If

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

xeno 30.03.2024 02:55

@xeno, хотя я ценю это мнение, подобные комментарии на этом сайте не приветствуются. Голосование за и принятие ответов — это все, что требуется для подтверждения и благодарности.

jmcilhinney 30.03.2024 08:27

Другие вопросы по теме