2012-04-08 7 views
0

J'ai une application en C# et en utilisant des formulaires, je place une étiquette chaque fois que je fais un clic droit sur le formulaire. Cette étiquette peut être déplacée, redimensionnée et modifiée sa couleur. Jusqu'ici tout va bien, mais je veux faire un serveur qui recevra tout ce que je fais et l'enverrai à d'autres clients pour qu'ils puissent voir tout ce que je fais et aussi qu'ils puissent faire exactement la même chose. J'ai fait des eventhandlers, mais je n'ai aucune idée de la manière d'envoyer les informations via le réseau, ni des informations à envoyer pour mettre à jour le formulaire pour chaque client.comment transmettre des mises à jour pour les clients réseau

internal System.Windows.Forms.ContextMenu mnuForm; 
    internal System.Windows.Forms.MenuItem mnuNewSquare; 
    internal System.Windows.Forms.ContextMenu mnuLabel; 
    internal System.Windows.Forms.MenuItem mnuColorChange; 
private void mnuNewSquare_Click(object sender, System.EventArgs e) 
    { 
     // Create and configure the "square". 
     Label newLabel = new Label(); 
     newLabel.Size = new Size(40, 40); 
     newLabel.BorderStyle = BorderStyle.FixedSingle; 

     // To determine where to place the label, you need to convert the 
     // current screen-based mouse coordinates into relative form coordinates. 
     newLabel.Location = this.PointToClient(Control.MousePosition); 

     // Attach a context menu to the label. 
     newLabel.ContextMenu = mnuLabel; 

     // Connect the label to all its event handlers. 
     newLabel.MouseDown += new MouseEventHandler(lbl_MouseDown); 
     newLabel.MouseMove += new MouseEventHandler(lbl_MouseMove); 
     newLabel.MouseUp += new MouseEventHandler(lbl_MouseUp); 

     // Add the label to the form. 
     this.Controls.Add(newLabel); 

    } 
    // Keep track of when fake drag or resize mode is enabled. 
    private bool isDragging = false; 
    private bool isResizing = false; 

    // Store the location where the user clicked on the control. 
    private int clickOffsetX, clickOffsetY; 

    private void lbl_MouseDown(object sender, 
     System.Windows.Forms.MouseEventArgs e) 
    { 
     // Retrieve a reference to the active label. 
     Control currentCtrl; 
     currentCtrl = (Control)sender; 

     if (e.Button == MouseButtons.Right) 
     { 
      // Show the context menu. 
      currentCtrl.ContextMenu.Show(currentCtrl, new Point(e.X, e.Y)); 
     } 
     else if (e.Button == MouseButtons.Left) 
     { 
      clickOffsetX = e.X; 
      clickOffsetY = e.Y; 

      if ((e.X + 5) > currentCtrl.Width && (e.Y + 5) > currentCtrl.Height) 
      { 
       // The mouse pointer is in the bottom right corner, 
       // so resizing mode is appropriate. 
       isResizing = true; 
      } 
      else 
      { 
       // The mouse is somewhere else, so dragging mode is 
       // appropriate. 
       isDragging = true; 
      } 
     } 
    } 

    private void lbl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     // Retrieve a reference to the active label. 
     Control currentCtrl; 
     currentCtrl = (Control)sender; 

     if (isDragging) 
     { 
      // Move the control. 
      currentCtrl.Left += e.X - clickOffsetX; 
      currentCtrl.Top += e.Y - clickOffsetY; 
     } 
     else if (isResizing) 
     { 
      // Resize the control. 
      currentCtrl.Width = e.X; 
      currentCtrl.Height = e.Y; 
     } 
     else 
     { 
      // Change the pointer if the mouse is in the bottom corner. 
      if ((e.X + 5) > currentCtrl.Width && (e.Y + 5) > currentCtrl.Height) 
      { 
       currentCtrl.Cursor = Cursors.SizeNWSE; 
      } 
      else 
      { 
       currentCtrl.Cursor = Cursors.Arrow; 
      } 
     } 
    } 
    private void lbl_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     isDragging = false; 
     isResizing = false; 
    } 

    private void mnuColorChange_Click(object sender, System.EventArgs e) 
    { 
     // Show color dialog. 
     ColorDialog dlgColor = new ColorDialog(); 
     dlgColor.ShowDialog(); 

     // Change label background. 
     mnuLabel.SourceControl.BackColor = dlgColor.Color; 

    } 

    private void DrawingSquares_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      this.ContextMenu.Show(this, new Point(e.X, e.Y)); 
     } 

    } 

C'est le code pour form1.cs, et le code suivant est pour Form1.designer.cs

private void InitializeComponent() 
    { 
     // this.SuspendLayout(); 
     // 
     // Form1 
     // 
     this.mnuForm = new System.Windows.Forms.ContextMenu(); 
     this.mnuNewSquare = new System.Windows.Forms.MenuItem(); 
     this.mnuLabel = new System.Windows.Forms.ContextMenu(); 
     this.mnuColorChange = new System.Windows.Forms.MenuItem(); 
     // 
     // mnuForm 
     // 
     this.mnuForm.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
                       this.mnuNewSquare}); 
     // 
     // mnuNewSquare 
     // 
     this.mnuNewSquare.Index = 0; 
     this.mnuNewSquare.Text = "Create New Square"; 
     this.mnuNewSquare.Click += new System.EventHandler(this.mnuNewSquare_Click); 
     // 
     // mnuLabel 
     // 
     this.mnuLabel.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
                       this.mnuColorChange}); 
     // 
     // mnuColorChange 
     // 
     this.mnuColorChange.Index = 0; 
     this.mnuColorChange.Text = "Change Color"; 
     this.mnuColorChange.Click += new System.EventHandler(this.mnuColorChange_Click); 
     // 
     // DrawingSquares 
     // 
     this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
     this.ClientSize = new System.Drawing.Size(628, 426); 
     this.ContextMenu = this.mnuForm; 
     this.Name = "DrawingSquares"; 
     this.Text = "DrawingSquares"; 
     this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DrawingSquares_MouseDown); 


    } 

Cela fait du côté client de l'application, dans laquelle vous pouvez dessiner une étiquette et modifier ses propriétés. J'ai besoin d'aide pour faire le serveur, toute aide est très appréciée, merci d'avance.

+0

Veuillez ne pas préfixer vos titres avec "C#" et autres. C'est ce que les tags sont pour. –

+0

Aucun de vos codes n'est associé à votre question –

+0

J'ai ajouté ce code pour que vous puissiez voir comment j'ajoutais l'étiquette au formulaire et comment je le redimensionnais ou le déplacais. Je ne sais pas quelles informations envoyer à travers le réseau, je veux dire, ce qui est là pour mettre à jour chaque fois que je fais un déménagement? – Carmichael

Répondre

0

Vous voudrez peut-être regarder SignalR:

Une bibliothèque côté client et serveur pour .NET qui fournit une messagerie et une abstraction sur une connexion persistante.

Questions connexes