C# 在两个wpf窗口之间发送信息
我们打开了两个窗口,就像聊天一样 这是文本框和按钮的外观:C# 在两个wpf窗口之间发送信息,c#,wpf,chat,active-window,C#,Wpf,Chat,Active Window,我们打开了两个窗口,就像聊天一样 这是文本框和按钮的外观: private void textBox_chat_TextChanged(object sender, TextChangedEventArgs e) { } private void button_enviar_Click(object sender, RoutedEventArgs e) { string chatMessage = textBox_chat.Text; } 我想知道如何通过按下按钮“button_e
private void textBox_chat_TextChanged(object sender, TextChangedEventArgs e)
{
}
private void button_enviar_Click(object sender, RoutedEventArgs e)
{
string chatMessage = textBox_chat.Text;
}
我想知道如何通过按下按钮“button_enviar”发送插入文本框中的信息。并打印到另一个窗口。
我一直在寻找类似于Application.Current.Windows
。。。但仍然没有找到成功的方法
我的代码实际上如下所示:
主窗口
namespace WpfApplication1
{
/// <summary>
/// Lógica de interacción para MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
// automatic code generated by the button
private void button_entrar_Click(object sender, RoutedEventArgs e)
{
// we catch the taxt input in the texBox
string userLoginName = textBox_pantalla_inicial.Text;
// We call the chat window
Window window1 = new Window1();
// we put the user name as the title of the chat window
window1.Title = userLoginName;
// show the chat window
window1.Show();
}
}
}
命名空间WpfApplication1
{
///
///Lógica de interacción para main window.xaml
///
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
//由按钮生成的自动代码
私有无效按钮\u进入者\u单击(对象发送者,路由目标)
{
//我们在文本框中捕获taxt输入
字符串userLoginName=textBox\u pantalla\u inical.Text;
//我们称之为聊天窗口
Window window1=新window1();
//我们将用户名作为聊天窗口的标题
window1.Title=userLoginName;
//显示聊天窗口
window1.Show();
}
}
}
聊天窗口
namespace WpfApplication1
{
/// <summary>
/// Lógica de interacción para Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
// inicialize chatWindow
InitializeComponent();
}
private void textBox_chat_TextChanged(object sender, TextChangedEventArgs e)
{
}
private void button_enviar_Click(object sender, RoutedEventArgs e)
{
string chatMessage = textBox_chat.Text;
}
private void button_erase_Click(object sender, RoutedEventArgs e)
{
}
}
}
命名空间WpfApplication1
{
///
///Lógica de interacción para Window1.xaml
///
公共部分类Window1:Window
{
公共窗口1()
{
//使聊天窗口个性化
初始化组件();
}
私有无效文本框\聊天\文本更改(对象发送者,文本更改开发者)
{
}
私有无效按钮\u环境\u单击(对象发送者,路由目标)
{
字符串chatMessage=textBox\u chat.Text;
}
私有无效按钮\u擦除\u单击(对象发送方,路由目标)
{
}
}
}
首先,您应该研究与XAML的绑定,例如。这样,在C#代码中,您就不需要关心所使用的UI控件——如果您不喜欢某些东西或希望改进窗口,您可以轻松地在XAML中更改这些控件
您只需要将MainWindow和ChatWindow视为对象。有很多方法可以使这项工作。最简单的方法之一是在聊天窗口中设置一个事件,主窗口在创建聊天窗口时订阅该事件。每当用户输入消息时,聊天窗口都会引发事件并通过事件中的参数传递文本,主窗口会捕获该事件,然后可以在其跟踪的所有聊天窗口中调用方法(或设置属性),以便将消息传递到所有聊天窗口
一个简单的示例(自由类型,未测试):
公共类主窗口:窗口
{
列表聊天窗口=新建列表();
公共无效AddChatWindow()
{
ChatWindow win=新建聊天窗口();
win.NewMessage+=MessageReceived;
win.Show();
添加(win);
}
接收到无效消息(对象发送方,MessageEventArgs e)
{
ChatWindow me=作为聊天窗口的发件人;
如果(me!=null)
{
foreach(在聊天窗口中赢得聊天窗口)
{
如果(赢!=我)
{
win.Add(e.Message);
}
}
}
}
}
公共类聊天窗口:窗口
{
公共事件处理程序NewMessage;
公共无效添加(字符串消息)
{
消息+=消息;
}
公共void UpdateText(字符串文本)
{
if(NewMessage!=null)
{
NewMessage(这个,newmessageeventargs(Message=text));
}
}
公共字符串消息{get;set;}
}
公共类MessageEventArgs:EventArgs
{
公共字符串消息{get;set;}
}
首先,您应该研究与XAML的绑定,例如。这样,在C#代码中,您就不需要关心所使用的UI控件——如果您不喜欢某些东西或希望改进窗口,您可以轻松地在XAML中更改这些控件
您只需要将MainWindow和ChatWindow视为对象。有很多方法可以使这项工作。最简单的方法之一是在聊天窗口中设置一个事件,主窗口在创建聊天窗口时订阅该事件。每当用户输入消息时,聊天窗口都会引发事件并通过事件中的参数传递文本,主窗口会捕获该事件,然后可以在其跟踪的所有聊天窗口中调用方法(或设置属性),以便将消息传递到所有聊天窗口
一个简单的示例(自由类型,未测试):
公共类主窗口:窗口
{
列表聊天窗口=新建列表();
公共无效AddChatWindow()
{
ChatWindow win=新建聊天窗口();
win.NewMessage+=MessageReceived;
win.Show();
添加(win);
}
接收到无效消息(对象发送方,MessageEventArgs e)
{
ChatWindow me=作为聊天窗口的发件人;
如果(me!=null)
{
foreach(在聊天窗口中赢得聊天窗口)
{
如果(赢!=我)
{
win.Add(e.Message);
}
}
}
}
}
公共类聊天窗口:窗口
{
公共事件处理程序NewMessage;
公共无效添加(字符串消息)
{
消息+=消息;
}
公共void UpdateText(字符串文本)
{
if(NewMessage!=null)
{
NewMessage(这个,newmessageeventargs(Message=text));
}
}
公共字符串消息{get;set;}
}
公共类MessageEventArgs:EventArgs
{
公共字符串消息{get;set;}
}
我设置了一个使用事件的小示例代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
ChatMsgDispacher _chatMsgDispacher = new ChatMsgDispacher();
public ChatChild GetNewChat()
{
var child = new ChatChild(); //or where you create the child
child.SetMsgDispacher(_chatMsgDispacher);
return child;
}
}
public class ChatMsgDispacher
{
public delegate void ChatMsgDelegate(string msg);
public event ChatMsgDelegate MessageUpdate;
public void Update(string msg)
{
if (MessageUpdate != null)
{
MessageUpdate(msg);
}
}
}
public class ChatChild
{
private ChatMsgDispacher _msgDispacher;
public void SetMsgDispacher(ChatMsgDispacher msgDispacher)
{
_msgDispacher = msgDispacher;
_msgDispacher.MessageUpdate += MsgDispacher_MessageUpdate;
}
void MsgDispacher_MessageUpdate(string msg)
{
//add the msg in the child view
}
private void button_enviar_Click(object sender, RoutedEventArgs e)
{
string chatMessage = textBox_chat.Text;
_msgDispacher.Update(chatMessage);
}
}
我设置了一个使用事件的小示例代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
ChatMsgDispacher _chatMsgDispacher = new ChatMsgDispacher();
public ChatChild GetNewChat()
{
var child = new ChatChild(); //or where you create the child
child.SetMsgDispacher(_chatMsgDispacher);
return child;
}
}
public class ChatMsgDispacher
{
public delegate void ChatMsgDelegate(string msg);
public event ChatMsgDelegate MessageUpdate;
public void Update(string msg)
{
if (MessageUpdate != null)
{
MessageUpdate(msg);
}
}
}
public class ChatChild
{
private ChatMsgDispacher _msgDispacher;
public void SetMsgDispacher(ChatMsgDispacher msgDispacher)
{
_msgDispacher = msgDispacher;
_msgDispacher.MessageUpdate += MsgDispacher_MessageUpdate;
}
void MsgDispacher_MessageUpdate(string msg)
{
//add the msg in the child view
}
private void button_enviar_Click(object sender, RoutedEventArgs e)
{
string chatMessage = textBox_chat.Text;
_msgDispacher.Update(chatMessage);
}
}
我会这样做:
public partial class ChatWindow : Window
{
private Client client;
public ChatWindow(Client _client)
{
InitializeComponent();
client = _client;
this.Title = client.Name + " chat";
client.MessageReceived += OnMessageReceived;
this.Loaded += OnLoaded;
}
public void OnMessageReceived(object sender, MessageReceivedArgs e)
{
chatControl.Text += e.Sender.Name+": "+ e.Message;
}
private void OnLoaded(object sender, EventArgs e)
{
client.Send("client " + client.Name + " is loaded!");
}
}
public class Client{
public string Name { get; set; }
public Chat chat{get;set;}
public Client(string name)
{
Name = name;
}
public delegate void MessageReceivedEventHandler(object sender, MessageReceivedArgs e);
public event MessageReceivedEventHandler MessageReceived;
private void RaiseMessageReceivedEvent(Client sender, string message)
{
MessageReceivedArgs e = new MessageReceivedArgs(sender,message);
if (MessageReceived != null)
MessageReceived(this, e);
}
public void MessageReceivedFromChat(Client sender,string message)
{
RaiseMessageReceivedEvent(sender,message);
}
public void Send(string message)
{
chat.SendMessage(this, message);
}
}
public class MessageReceivedArgs : EventArgs
{
public string Message { get; set; }
public Client Sender { get; set; }
public MessageReceivedArgs(Client sender,string message)
{
Message = message;
Sender = sender;
}
}
public class Chat
{
private List<Client> clients;
public Chat()
{
clients = new List<Client>();
}
public void AddClient(Client client)
{
client.chat = this;
clients.Add(client);
}
public void RemoveClient(Client client)
{
client.chat = null;
clients.Remove(client);
}
public void SendMessage(Client sender, string message)
{
foreach(Client client in clients){
if (client != sender)
{
client.MessageReceivedFromChat(sender, message);
}
}
}
}
这个
Chat chat = new Chat();
Client jacques = new Client("jacques");
Client Pierre = new Client("Pierre");
chat.AddClient(jacques);
chat.AddClient(Pierre);
ChatWindow cw = new ChatWindow(jacques);
cw.Show();
ChatWindow cw1 = new ChatWindow(Pierre);
cw1.Show();