简体   繁体   English

C# 在表单的按钮单击时调用方法

[英]C# Call a method on button click of a form

I've been trying to do this all day and I don't see any helpful resources to resolve this issue.我整天都在尝试这样做,但我没有看到任何有用的资源来解决这个问题。

I want to call Server() in the MyTcpListener class from the Dashboard form when a button is clicked.单击按钮时,我想从Dashboard表单中调用MyTcpListener class 中的Server()

Thanks in advance.提前致谢。

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace Csearch
{
    class MyTcpListener
    {
        public static void Server()
        {
            TcpListener server = null;
            try
            {
                // Set the TcpListener on port 13000.
                Int32 port = 13000;
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");

                // TcpListener server = new TcpListener(port);
                server = new TcpListener(localAddr, port);

                // Start listening for client requests.
                server.Start();

                // Buffer for reading data
                Byte[] bytes = new Byte[256];
                String data = null;

                // Enter the listening loop.
                while (true)
                {
                    Console.Write("Waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    // You could also use server.AcceptSocket() here.
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Connected!");

                    data = null;

                    // Get a stream object for reading and writing
                    NetworkStream stream = client.GetStream();

                    int i;

                    // Loop to receive all the data sent by the client.
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        // Translate data bytes to a ASCII string.
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                        Console.WriteLine("Received: {0}", data);

                        // Process the data sent by the client.
                        data = data.ToUpper();

                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                        // Send back a response.
                        stream.Write(msg, 0, msg.Length);
                        Console.WriteLine("Sent: {0}", data);
                    }

                    // Shutdown and end connection
                    client.Close();
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            finally
            {
                // Stop listening for new clients.
                server.Stop();
            }

            Console.WriteLine("\nHit enter to continue...");
            Console.Read();
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Csearch;

namespace Csearch
{

    
    public partial class Dashboard : Form
    {
        public Dashboard()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        // Server Start
        private void button1_Click(object sender, EventArgs e)
        {
            
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        { 

        }
        // Client Start
        private void button1_Click_1(object sender, EventArgs e)
        {
            Console.WriteLine("This is the start of something very great");
             
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            

        }
    }
}

Since you have defined Server as a static method in MyTcpListener , you can call it directly like followed.由于您已在MyTcpListener中将Server定义为 static 方法,因此您可以直接调用它,如下所示。

private void button1_Click(object sender, EventArgs e)
{
    MyTcpListener.Server();
}

Make your class as public static将您的 class 设为公共 static

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace Csearch
{
    public static class MyTcpListener
    {
        public static void Server()
        {
            TcpListener server = null;
            try
            {
                // Set the TcpListener on port 13000.
                Int32 port = 13000;
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");

                // TcpListener server = new TcpListener(port);
                server = new TcpListener(localAddr, port);

                // Start listening for client requests.
                server.Start();

                // Buffer for reading data
                Byte[] bytes = new Byte[256];
                String data = null;

                // Enter the listening loop.
                while (true)
                {
                    Console.Write("Waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    // You could also use server.AcceptSocket() here.
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Connected!");

                    data = null;

                    // Get a stream object for reading and writing
                    NetworkStream stream = client.GetStream();

                    int i;

                    // Loop to receive all the data sent by the client.
                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        // Translate data bytes to a ASCII string.
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                        Console.WriteLine("Received: {0}", data);

                        // Process the data sent by the client.
                        data = data.ToUpper();

                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                        // Send back a response.
                        stream.Write(msg, 0, msg.Length);
                        Console.WriteLine("Sent: {0}", data);
                    }

                    // Shutdown and end connection
                    client.Close();
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            finally
            {
                // Stop listening for new clients.
                server.Stop();
            }

            Console.WriteLine("\nHit enter to continue...");
            Console.Read();
        }
    }
}

Your class and method should be public and static like this.您的 class 和方法应该是public的,并且static像这样。 So that you can use it without creating an instance of the class and call it directly.这样您就可以使用它而无需创建 class 的实例并直接调用它。

public static class MyTcpListener
{
    public static void Server()
    {

You just need changing your class ( MyTcpListener ) to the public and then call your method as below:您只需要将您的 class ( MyTcpListener )更改为public ,然后调用您的方法如下:

   namespace Csearch
   {
        public class MyTcpListener
        {
            public static void Server()
            {
             //......
            }
        }
    }
    ---------------------------------
    namespace Csearch
    { 
        public partial class Dashboard : Form
        {
            public Dashboard()
            {
                InitializeComponent();
            }
            // Server Start
            private void button1_Click(object sender, EventArgs e)
            {
                MyTcpListener.Server();
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM