如何更改表单中的用户控件label.text
本文关键字:控件 label text 用户 何更改 表单 | 更新日期: 2023-09-27 18:19:56
好吧,所以我有一个名为"ModbusMaster"的用户控件和一个只有一个按钮的表单。
当我单击按钮时,我想更改控件上标签的文本。。
然而,什么也没发生。。
这是的主要表格
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ModbusMaster_2._0
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ModbusMaster mb = new ModbusMaster();
public void button1_Click(object sender, EventArgs e)
{
mb.openPort("wooooo");
}
}
}
我正在调用方法openPort并将字符串"wooo"传递给它。
这是我的控制
文本未更新:(:(:)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace ModbusMaster_2._0
{
public partial class ModbusMaster : UserControl
{
string portName = "COM1"; //default portname
int timeOut = 300; //default timeout for response
SerialPort sp = new SerialPort();
public ModbusMaster()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
portLabel.Text = portName;
}
public void openPort(string port)
{
statusLabel.Text = port;
}
/*
* Properties
*/
public string SerialPort //Set portname
{
get { return portName; }
set { portName = value;}
}
public int TimeOut //Set response timeout
{
get { return timeOut; }
set { timeOut = value; }
}
}
}
我认为您必须有两个ModbusMaster
实例。
其中一个是您可以在显示屏上看到的,并且没有更新。
另一个是您在class Form1
中创建的代码行:
ModbusMaster mb = new ModbusMaster();
这是您正在修改的,但它不是显示的(我看不到您可以在任何地方显示它)。
当您调用mb.openPort("wooooo");
时,您需要使用实际显示的引用
[编辑]
仔细想想,您可能根本没有实例化另一个用户控件。
您是否使用Visual Studio的窗体设计器将用户控件添加到主窗体中?我本来以为你会的,但现在我意识到事实可能并非如此。
如果没有,您应该这样做,将其命名为mb
,并删除表示ModbusMaster mb = new ModbusMaster();
的行,这样它就可以工作,而无需进行更广泛的更改。
您正在创建UserControl,但没有将其分配给窗体的控件集合。在构造函数中尝试类似的操作。
namespace ModbusMaster_2._0
{
public partial class Form1 : Form
{
ModbusMaster mb = new ModbusMaster();
public Form1()
{
InitializeComponent();
this.Controls.Add(mb); //Add your usercontrol to your forms control collection
}
public void button1_Click(object sender, EventArgs e)
{
mb.openPort("wooooo");
}
}
}