タブコントロールを使用すると言う人のために編集
タブコントロールを使用したいと思います。それでも、メインフォームからタブコントロールをリンクする方法がわかりません。私は次のようなことをしなければならないと思います:
- 空白のTabControlを含むフォームを作成します。ページは作成されません。
- 私のコントロールを使用して、CustomuserControlを作成します([追加]-> [ユーザーコントロール])。
- 新しいチャットが入ったら、タブコントロールアイテム、タブコントロールページを作成し、カスタムコントロールをタブコントロールページに追加します。タブコントロールハンドルをハッシュテーブルに追加して、新しいメッセージが着信したときに、適切なコントロールでそれらを参照できるようにします。
しかし、私はこれを行う方法がよくわかりません。たとえば、ユーザーコントロール内でカスタムイベントを作成できることを知っています。たとえば、各コントロールに「太字」ボタンがある場合、そのコントロールが設定されている各ページで実際にボタンを使用できます。
それでも、メッセージコールバックを登録して、MessageGrabberを使用してデータを送信できるようにする必要があります。また、新しいウィンドウが表示されたときにプログラムで割り当てられるUserControl内に割り当てられていないものもあります。しかし、参照するコントロールがないため、割り当てることができません。
KISS哲学
今のようにフォームを作成して、そのフォームをウィンドウなどにドッキングする方が簡単ではないでしょうか。つまり、本質的にはまだフォームを作成しているのですが、それは別のウィンドウでもありますか?
元の質問
さて、私は困惑しています(複雑なC#ロジックに関してはそれほど驚くことではありません笑)!私がやろうとしていることは次のとおりです。
目標:新しいチャットアプリケーションのタブ付きチャットを設定します。
完了:チャットメッセージを受信するか、ユーザーが名簿に新しいチャットを要求するたびに、新しいウィンドウを開きます。これは完全に機能しており、ユーザーがチャットをまだ開いていない場合にのみウィンドウを開きます。そこは素晴らしくて幸せです。
問題:窓が欲しくない。ええと、私はウィンドウが欲しいのですが、たくさんの別々のウィンドウは必要ありません。たとえば、カスタマーサービスチームは一度に約10個のアクティブなIMウィンドウを使用している場合がありますが、10個のウィンドウを並べて表示する必要はありません。むしろ、1つのプライベートIMウィンドウがあり、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 from: http ://www.ag-software.de/agsxmpp-sdk/download/
問題:このコードをウィンドウではなくタブ内で開くように変換するにはどうすればよいですか?誰かが私にいくつかのアイデアを与えて、それを手伝ってくれませんか。私はその概念に頭を悩ませているようには思えません。