程序运行后,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();
}
}
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);
在窗体上放置两个普通标签控件 (Label),分别显示“Hello”和“World”,然后新建一个超链接标签 (LinkLabel),单击后 交换这两个标签上显示的信息。
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//交换标签上的信息。
string temp = label1.Text;
label1.Text = label2.Text;
label2.Text = temp;
}
针对问题: 在C#程序运行时无法显示textbox,应该如何解决?
解决方案: 1. 确认textbox的可见性和启用状态 在窗体设计器中确认textbox的Visible和Enabled属性都为True,或者在代码中确认设置为True:
textBoox1.Visible = true; textBox1.Enabled = true;
确认textbox的位置和大小是否合适 在窗体设计器中或代码中确认textbox的Location和Size属性是否正确,是否与其他控件有重叠或超出界面边界。
确认代码中是否有对textbox的处理或显示逻辑 确认程序中是否存在对textbox的操作或显示逻辑,比如清空、隐藏、设置文字等,检查这些逻辑是否正确。
确认程序是否已经启动 确认程序是否已经启动,如果是在窗体加载之前就尝试在textbox上显示文字,可能会不成功。
确认程序版本和依赖库 确认程序所使用的版本和依赖库是否正确,如果版本不对或依赖库缺失可能会导致textbox无法正常显示。
如果以上方案都没有解决问题,请尝试在缩小程序至最小的情况下逐一排除其他因素,最终确认问题所在。