Dock Windows Forms (интерфейс чата с вкладками)
Редактировать для тех, кто говорит, чтобы использовать вкладку управления
Я хотел бы использовать вкладку управления; тем не менее я понятия не имею, как связать элемент управления с вкладками вверх от основной формы. Я бы предположил, что мне нужно сделать что-то вроде этого:
- Создайте форму с пустым TabControl на ней, без страниц.
- Создайте CustomuserControl (Add -> user Control) с моими элементами управления на нем.
- При входе в новый чат создайте элемент управления вкладками, Страница управления вкладками, добавьте пользовательский элемент управления на страницу управления вкладками. Добавьте дескриптор элемента управления вкладкой в хэш-таблицу, чтобы при поступлении новых сообщений на них можно было ссылаться в соответствующем элементе управления.
Но я так не уверен, как это сделать. Например, я знаю, что могу создавать собственные события внутри пользовательского элемента управления, так что, например, если у каждого элемента управления есть кнопка "полужирный", я могу на каждой странице, на которой есть этот элемент управления, фактически использовать кнопку.
Тем не менее, мне также нужно зарегистрировать обратные вызовы сообщений, чтобы я мог использовать 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? Может кто-нибудь, пожалуйста, дайте мне некоторые идеи, и помогите с этим. Я просто не могу обернуться вокруг этой концепции.