English 中文(简体)
如何向网络客户传送最新信息
原标题:how to transmit updates for network clients

I have an application in C# and using forms, I am placing a label each time I right click on the form. This label can be moved around, re-sized and modified its color. So far so good, but I want to make a server that will receive everything I do and send this to other clients so they can see everything I do, and also they can do exactly the same things. I have made eventhandlers, but I have no idea how to send the information through the network, or what information to send to update the form for each client.

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

    }

这是表1.c的代码,下一个代码为表1。

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


    }

这是申请的客户,在申请中,你可以贴上标签,修改其财产。 我需要一些帮助,帮助如何发挥服务器的作用,非常赞赏任何帮助,并事先感谢你。

问题回答

http://www.nuget.org/ Packages/SignalR“rel=“nofollow” 信号R:

用户和服务器边图书馆。 提供讯息和对持续联系的抽象认识的网络。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签