2015-12-02 2 views
0

У нас есть 2 окна открыты, как чатОтправить информацию между 2 МОФ окна

enter image description here

Это то, что TextBox и кнопка выглядит следующим образом:

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 ... но до сих пор не нашел способ сделать это.

Мой код выглядит на самом деле так:

MainWindow

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();    
      }  
     } 
    } 

ChatWindow

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) 
     { 

     } 
    } 
} 
+0

Вы можете посмотреть на размещение службы WCF внутри своих приложений и вызов службы для отображения сообщений. –

+0

WCF - Windows Communication Foundation https://msdn.microsoft.com/en-us/library/ms731082(v=vs.110).aspx Поиск учебников по чату в .NET. – Paparazzi

+0

Спасибо за ваши отзывы, но вам нужно решение работать полностью в локальном ... – Qu4k3

ответ

1

Во-первых, вы должны смотреть на связывание с XAML, такие как here. Таким образом, в коде C# вам не нужно будет заботиться об используемых элементах пользовательского интерфейса - и вы можете легко изменить эти элементы управления в XAML, если вам что-то не нравится или вы хотите улучшить свое окно.

Вам нужно только подумать о своих MainWindow и ChatWindow как о объектах. Есть много способов сделать эту работу. Один из самых простых способов - иметь событие в окне чата, которое подписывается вашим основным окном, когда оно создает окно чата. Всякий раз, когда пользователь вводит свое сообщение, окно чата вызывает событие и передает текст через аргументы в событии, которое основное окно улавливает, а затем может вызывать метод (или устанавливать свойство) во всех окнах чата, которые он отслеживает, так что сообщение передается во все окна чата.

Простой пример (свободно напечатал, не тестировался):

public class MainWindow : Window 
{ 
    List<ChatWindow> chatWindows = new List<ChatWindow>(); 
    public void AddChatWindow() 
    { 
     ChatWindow win = new ChatWindow(); 
     win.NewMessage += MessageReceived; 
     win.Show(); 
     chatWindows.Add(win); 
    } 
    void MessageReceived(object sender, MessageEventArgs e) 
    { 
     ChatWindow me = sender as ChatWindow; 
     if (me != null) 
     { 
      foreach (ChatWindow win in chatWindows) 
      { 
       if (win != me) 
       { 
        win.Add(e.Message); 
       } 
      } 
     } 
    } 
} 

public class ChatWindow : Window 
{ 
    public event EventHandler<MessageEventArgs> NewMessage; 

    public void Add(string message) 
    { 
     Messsage += message; 
    } 
    public void UpdateText(string text) 
    { 
     if (NewMessage != null) 
     { 
      NewMessage(this, new MessageEventArgs(Message = text)); 
     } 
    } 
    public string Message {get;set;} 
} 
public class MessageEventArgs : EventArgs 
{ 
    public string Message{get;set;} 
} 
+0

Я просто актуализирую свой пост с кодом, который у меня есть, ваше сообщение действительно близко к моему, я буду оценивать, если вы можете взглянуть на мой код. – Qu4k3

+0

Большое спасибо за вашу помощь, это помогло мне прояснить мои сомнения! – Qu4k3

1

Я установил небольшой пример кода, который используется событие:

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); 
    } 
} 
+0

Спасибо за ваш отзыв! Я посмотрю на ваш код – Qu4k3

2

Это, как я хотел бы сделать:

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(); 
+0

Спасибо! Я посмотрю ваш код – Qu4k3

Смежные вопросы