程序运行没有显示,如何解决?(语言-c#)

程序运行后,textbox没有显示?

private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                string[] str = SerialPort.GetPortNames();   //获取连接到电脑的串口号并存进数组
                if (str.Length > 0)
                {
                    serialPort1.PortName = "com5";
                    serialPort1.BaudRate = 9600;
                    serialPort1.DataBits = 8;
                    serialPort1.Parity = Parity.None;
                    serialPort1.StopBits =StopBits.Two;
                    serialPort1.Encoding = Encoding.BigEndianUnicode;
                    serialPort1.Open();
                }
                else
                {
                    MessageBox.Show("当前无串口连接!");
                }
            }
            catch
            {
                MessageBox.Show("无串口设备!/r/n请检查是否连接设备!/r/n请检查设备驱动!");
            }
        }
        //向低阻仪发送
        private void timer1_Tick(object sender, EventArgs e)
        {
            char c1 = (char)259;         //01H 03H
            char c2 = (char)0001;        //00H 01H
            char c3 = (char)0014;        //00H 0EH
            char c4 = (char)38350;       //95H CEH
            string OutData = c1.ToString() + c2.ToString() + c3.ToString() + c4.ToString();
            serialPort1.Write(OutData);
        }
        //触发事件,读取低阻仪返回数据
        private int receiveCount = 0;
        List<byte> sp_buffer = new List<byte>(4096);    //串口缓存区
        int sp_buffer_max = 4096;   //串口缓存区最大缓存字节数
        byte[] data = new byte[9192]; //用来存放缓冲区的数据流
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            int Byte_len = serialPort1.BytesToRead; //读取缓存的数据长度
            byte[] Rc_byte = new byte[Byte_len];
            receiveCount++;
            serialPort1.Read(Rc_byte, 0, Byte_len);   //将缓存数据存储进字节数组里面

            if (sp_buffer.Count > sp_buffer_max)    //缓存超过字节数 先丢弃前面的字节  
                sp_buffer.RemoveRange(0, sp_buffer_max); //丢弃前面的字节0到sp_buffer_max
            if (receiveCount == 3)
            {
                sp_buffer.AddRange(Rc_byte);    //存入缓存区
                if (sp_buffer.Count > 26)
                {
                    sp_buffer.CopyTo(0, data, 0, sp_buffer.Count);
                    this.Invoke(new EventHandler(DisplayText));
                }
            }
        }
        
        private  void DisplayText(object sender,EventArgs e)
        {
            short data2;
            string data7 = Encoding.Default.GetString(data, 0, sp_buffer.Count);
            char[] data1 = data7.ToCharArray();
            string data3 = "", data4 = "", data5 = "", data6 = "";

            for (int i = 0; i < data1.Length; i++)
            {
                data2 = (short)data1[i];
                string hexData = Convert.ToString(data2, 16);

                if (hexData.Length >= 16)
                {
                    data3 = hexData.Substring(14, 2) + hexData.Substring(12, 2) + hexData.Substring(10, 2) + hexData.Substring(8, 2);
                }
                if (hexData.Length >= 32)
                {
                    data4 = hexData.Substring(28, 2) + hexData.Substring(26, 2) + hexData.Substring(24, 2) + hexData.Substring(22, 2);
                }
                if (hexData.Length >= 48)
                {
                    data5 = hexData.Substring(42, 2) + hexData.Substring(40, 2) + hexData.Substring(38, 2) + hexData.Substring(36, 2);
                }
                if (hexData.Length >= 64)
                {
                    data6 = hexData.Substring(56, 2) + hexData.Substring(54, 2) + hexData.Substring(52, 2) + hexData.Substring(50, 2);
                }
            }
            textBox1.Text = DataChenge(data3).ToString();
            textBox2.Text = DataChenge(data4).ToString();
            textBox3.Text = DataChenge(data5).ToString();
            textBox4.Text = DataChenge(data6).ToString();
        }
        private float DataChenge(string s)
        {
            
            MatchCollection matches = Regex.Matches(s, @"[0-9A-Fa-f]{2}");
            byte[] bytes = new byte[matches.Count];
            for (int i = 0; i < bytes.Length; i++)
                bytes[i] = byte.Parse(matches[i].Value, System.Globalization.NumberStyles.AllowHexSpecifier);
            float m = BitConverter.ToSingle(bytes.Reverse().ToArray(), 0);
            return m;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            Close();
        }
        private void Form1_FormClosing(object sender,FormClosingEventArgs e) 
        {
            if (serialPort1.IsOpen) serialPort1.Close();
        }
    }

img


private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        // 其他代码...
        
        // 设置 TextBox 的默认值
        textBox1.Text = "Default value for TextBox 1";
        textBox2.Text = "Default value for TextBox 2";
        textBox3.Text = "Default value for TextBox 3";
        textBox4.Text = "Default value for TextBox 4";
    }
    catch
    {
        MessageBox.Show("无串口设备!\r\n请检查是否连接设备!\r\n请检查设备驱动!");
    }
}

serialPort1_DataReceived方法根本都没有注册呀
在load里加一句
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/185814
  • 你也可以参考下这篇文章:C#线程中使用委托实现textbox显示
  • 除此之外, 这篇博客: C#窗体应用程序之标签控件与TextBox文本框与账号密码登陆窗口中的 1.添加标签并交换标签 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在窗体上放置两个普通标签控件 (Label),分别显示“Hello”和“World”,然后新建一个超链接标签 (LinkLabel),单击后 交换这两个标签上显示的信息。
    在这里插入图片描述

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        //交换标签上的信息。
        string temp = label1.Text;
        label1.Text = label2.Text;
        label2.Text = temp;
    }
    
  • 您还可以看一下 王小科老师的零基础学C#编程—C#从小白到大咖课程中的 TextBox控件小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    针对问题: 在C#程序运行时无法显示textbox,应该如何解决?

    解决方案: 1. 确认textbox的可见性和启用状态 在窗体设计器中确认textbox的Visible和Enabled属性都为True,或者在代码中确认设置为True:

    textBoox1.Visible = true; textBox1.Enabled = true;

    1. 确认textbox的位置和大小是否合适 在窗体设计器中或代码中确认textbox的Location和Size属性是否正确,是否与其他控件有重叠或超出界面边界。

    2. 确认代码中是否有对textbox的处理或显示逻辑 确认程序中是否存在对textbox的操作或显示逻辑,比如清空、隐藏、设置文字等,检查这些逻辑是否正确。

    3. 确认程序是否已经启动 确认程序是否已经启动,如果是在窗体加载之前就尝试在textbox上显示文字,可能会不成功。

    4. 确认程序版本和依赖库 确认程序所使用的版本和依赖库是否正确,如果版本不对或依赖库缺失可能会导致textbox无法正常显示。

    如果以上方案都没有解决问题,请尝试在缩小程序至最小的情况下逐一排除其他因素,最终确认问题所在。