2012-04-08 6 views
0

私はアプリケーションをC#で使用していますが、フォームを使用すると、フォームを右クリックするたびにラベルが貼り付けられます。このラベルは、移動したり、サイズを変更したり、色を変更することができます。 これまでのところよくできましたが、私がやることすべてを受け取り、これを他のクライアントに送信するサーバーを作って、私がやることすべてを見ることができ、まったく同じことをすることができます。私はイベントハンドラーを作っていますが、ネットワークを介して情報を送信する方法や、クライアントごとにフォームを更新するために送信する情報はわかりません。ネットワーククライアントのアップデートを送信する方法

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

    } 

これは、Form1.csのためのコードであり、そして次のコードは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); 


    } 

ためである。これは、あなたがラベルを描くことが可能なアプリケーション、クライアント側の処理を行いそのプロパティを変更します。私はサーバー側を行う方法についていくつかの助けが必要です、どんな助けも大歓迎です、事前に感謝します。

あなたは SignalRで見たいと思うかもしれません
+0

タイトルに「c#」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+0

あなたのコードのどれもあなたの質問に関連していません –

+0

このコードを追加したので、フォームにラベルをどのように追加していたか、どのようにサイズを変更したり移動したりしているか分かりました。ネットワークを介してどのような情報を送るのか分かりません。私が動くたびに更新する情報は何ですか? – Carmichael

答えて

0

メッセージングおよび永続的な接続を介して抽象化を提供し、.NETクライアントとサーバー側ライブラリ。

関連する問題