Dock Windows Forms (интерфейс чата с вкладками) - PullRequest
0 голосов
/ 23 апреля 2011

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

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

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

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

Тем не менее, мне также нужно зарегистрировать обратные вызовы сообщений, чтобы я мог использовать 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 /

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

1 Ответ

0 голосов
/ 23 апреля 2011

Использование TabControl

...