Редактировать для тех, кто говорит использовать элемент управления вкладками
Я хотел бы использовать элемент управления вкладками;пока я понятия не имею, как связать элемент управления с вкладками вверх от главной формы.Я бы предположил, что мне нужно сделать что-то вроде этого:
- Создать форму с пустым TabControl на нем, без страниц, созданных.
- Создать CustomuserControl (Добавить -> Пользовательский элемент управления), с моими элементами управления на нем.
- При входе в новый чат создайте элемент управления вкладками, Страница управления вкладками, добавьте пользовательский элемент управления на страницу управления вкладками.Добавьте дескриптор элемента управления вкладками в хэш-таблицу, чтобы при поступлении новых сообщений на них можно было ссылаться в соответствующем элементе управления.
Но я не совсем уверен, как это сделать.Например, я знаю, что могу создавать собственные события внутри пользовательского элемента управления, так что, например, если у каждого элемента управления есть кнопка «полужирный», я могу на каждой странице, на которой есть этот элемент управления, фактически использовать кнопку.
Тем не менее, мне также нужно зарегистрировать обратные вызовы сообщений, чтобы я мог использовать MessageGrabber для отправки данных на него, и это не назначается внутри UserControl, который назначается программно при входе в новое окно;но так как у меня нет элементов управления для ссылки, я не могу назначить.
KISS Philosophy
Не будет ли проще просто создать форму, как я делаю сейчас, а затем просто закрепить эту форму в окне иличто-то?Так что, по сути, он все еще создает форму, но это также отдельное окно?
Оригинальный вопрос
Хорошо, я в тупике (что не так уж и удивительно, когда речь заходит о сложной логике C #!Я пытаюсь сделать следующее:
Цель : настройка чата с вкладками для нового приложения чата.
Завершено : Открыть новое окновсякий раз, когда получено сообщение чата, или пользователь запрашивает новый чат из реестра.Это работает отлично, и открывает только окно, когда у пользователя еще нет открытого чата.Приятно и счастливо там.
Проблема : Я не хочу окон.Ну, я хочу окно, но я не хочу тонны отдельных окон.Например, наша служба поддержки клиентов может иметь около 10 активных окон чата одновременно, я не хочу, чтобы у них было 10 окон, выложенных плиткой.Я бы предпочел, чтобы у них было одно окно приватного чата, и все 10 вкладок закреплены внутри окна.
Логика : Это моя логика, которая может быть ошибочной, я прошу прощения:
- OnMessage: открыть новое окно чата, если оно еще не существует;если он существует, откройте его как вкладку в текущем окне чата.
- SendMessage: ^^ ditto ^^
Примеры кода :
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 from: http://www.ag -software.de / agsxmpp-sdk / download /
Проблема : Как преобразовать этот код для открытия внутри вкладок, а не для окон?Может кто-нибудь, пожалуйста, дайте мне несколько идей и помогите с этим.Я просто не могу обернуться вокруг этой концепции.