0

对,所以我有一个名为“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; }
    }
  }
}
4

2 回答 2

2

我认为您必须有两个ModbusMaster.

其中之一是您可以在显示屏上看到的,并且没有更新。

另一个是您class Form1使用以下代码行创建的:

ModbusMaster mb = new ModbusMaster();

那是您正在修改的那个,但不是显示的那个(我看不到您可以显示的任何地方)。

您需要做的是在调用时使用对实际显示的引用的引用mb.openPort("wooooo");

[编辑]

考虑一下 - 您可能根本没有实例化另一个用户控件。

您是否使用 Visual Studio 的表单设计器将用户控件添加到您的主表单?我原以为你这样做了,但现在我意识到情况可能并非如此。

如果没有,您应该这样做,给它起名字mb并删除上面写着的行,ModbusMaster mb = new ModbusMaster();它可能会起作用,而无需您进行更广泛的更改。

于 2013-06-26T15:13:01.400 回答
1

您正在创建用户控件,但没有将其分配给表单的控件集合。在您的构造函数中尝试这样的事情。

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");
        }
    }
}
于 2013-06-26T17:08:53.270 回答