Dock Windows Forms (интерфейс чата с вкладками)

Редактировать для тех, кто говорит, чтобы использовать вкладку управления

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

  1. Создайте форму с пустым TabControl на ней, без страниц.
  2. Создайте CustomuserControl (Add -> user Control) с моими элементами управления на нем.
  3. При входе в новый чат создайте элемент управления вкладками, Страница управления вкладками, добавьте пользовательский элемент управления на страницу управления вкладками. Добавьте дескриптор элемента управления вкладкой в ​​хэш-таблицу, чтобы при поступлении новых сообщений на них можно было ссылаться в соответствующем элементе управления.

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

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


ПОЦЕЛУЙ Философия

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


Оригинальный вопрос

Итак, я в замешательстве (что не так уж удивительно, когда речь заходит о сложной логике C#)! Я пытаюсь сделать следующее:

Цель: настройка чата с вкладками для нового приложения чата.

Завершено: Открывайте новое окно при получении сообщения чата или когда пользователь запрашивает новый чат из реестра. Это работает отлично и открывает только окно, когда у пользователя еще нет открытого чата. Приятно и счастливо там.

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

Логика: Это моя логика, которая может быть ошибочной, я прошу прощения:

  • OnMessage: открыть новое окно чата, если оно еще не существует; если он существует, откройте его как вкладку в текущем окне чата.
  • SendMessage: ^^ То же самое ^^

Примеры кода:

if (!Util.ChatForms.ContainsKey(msg.From.Bare))
            {
                RosterNode rn = rosterControl1.GetRosterItem(msg.From);
                string nick = msg.From.Bare;
                if (rn != null)
                    nick = rn.Text;
                frmChat f = new frmChat(msg.From, xmpp, nick);
                f.Show();
                f.IncomingMessage(msg);
                return;
            }

Обратите внимание на выше: Util. Функция просто отслеживает, какие окна открыты внутри хеш-таблицы, таким образом, когда приходят сообщения, они направляются в соответствующее окно. Это добавлено с:

Util.ChatForms.Add(m_Jid.Bare.ToLower(), this);

Команда в форме frmChat().

Используемая библиотека: agsxmpp от: http://www.ag-software.de/agsxmpp-sdk/download/

Проблема: Как я могу преобразовать этот код, чтобы открыть внутри вкладок, а не Windows? Может кто-нибудь, пожалуйста, дайте мне некоторые идеи, и помогите с этим. Я просто не могу обернуться вокруг этой концепции.

1 ответ

Решение

Используйте TabControl

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