如何更改表单中的用户控件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; }
    }
  }
}

如何更改表单中的用户控件label.text

我认为您必须有两个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");
        }
    }
}