c#从另一个类更新标签

本文关键字:更新 标签 另一个 | 更新日期: 2023-09-27 18:15:08

我如何从另一个类更新标签,我已经看到了许多答案,但不是我的例子。下面是我的代码:

class Form1:看起来像这样:

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 login
{
public partial class Form1 : Form
{
    public static Form1 Instance { get; private set; }

    public Form1()
    {
        InitializeComponent();
        Instance = this;
        MediaEvent device = new MediaEvent();
    }


    private void button2_Click(object sender, EventArgs e)
    {            
        MediaEvent msg = new MediaEvent();
        string u = textBox1.Text;
        string p = textBox2.Text;
        msg.checkLogin(u, p);
        label2.Text = msg.getMessage();
    }
    public void TextStatus(string aString)
    {
        // Place messages in Main Display list box window
        this.lstatus.Text = aString;
    }
    public void TextToBox(string aString)
    {
        // Place messages in Main Display list box window
        this.listBox1.Items.Insert(0, aString);
    }
    public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
    }
}
}

类MediaEvent看起来像这样:

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Windows.Forms;
namespace login
{
class MediaEvent: IDisposable
{
    public string MyMsg { get; set; }
    public string State { get; set; }
    public string getMessage()
        {
            return MyMsg;
        }
    public void checkLogin(string u, string p)
    {
        if((u != "user") && (p != "password"))
        {
            MyMsg +="Id or password no correct, please try again.";
        }
    }
    Form1 MainForm;

    private ManagementEventWatcher watcherAttach;
    private ManagementEventWatcher watcherRemove;
    public MediaEvent()
    {
        if (watcherAttach == null)
        {
            watcherAttach = new ManagementEventWatcher();          
            watcherAttach.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
            watcherAttach.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
            //Form1.Instance.TextStatus("On");
            watcherAttach.Start();
        }
        if (watcherRemove == null)
        {
            watcherRemove = new ManagementEventWatcher();            
            watcherRemove.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3");
            watcherRemove.EventArrived += new EventArrivedEventHandler(watcher_EventRemoved);
            //Form1.Instance.TextStatus("Off");
            watcherRemove.Start();
        }
    }
    /// <summary>
    /// Used to dispose of the USB device watchers when the USBControl class is disposed of.
    /// </summary>
    public void Dispose()
    {
        if (watcherAttach != null)
        {
            watcherAttach.Stop();
            watcherAttach.Dispose();                
            watcherAttach = null;
        }
        if(watcherRemove != null)
        {
            watcherRemove.Stop();
            watcherRemove.Dispose();
            watcherRemove = null;                
        }
    }

    void watcher_EventArrived(object sender, EventArrivedEventArgs e)
    {
        Form1.Instance.TextStatus("On");
        //MessageBox.Show("On");
    }
    void watcher_EventRemoved(object sender, EventArrivedEventArgs e)
    {
        Form1.Instance.TextStatus("Off");
        //MessageBox.Show("off");
    }


    ~MediaEvent()
    {
        this.Dispose();
    }
}
}

这是完整的代码更清楚。我需要你的帮助

c#从另一个类更新标签

您需要将代码更改为以下内容

public partial class Form1 : Form
    {
        private static Form1 _instance; 
        public Form1()
        {
            InitializeComponent();
            _instance = this; 
        }

        public string TextStatus
        {
            get { return StatusLabel.Text;  }
            set { StatusLabel.Text = value;  }
        }
        public static Form1 Instance { get { return  _instance;  }}

    }
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
    {
        Form1.Instance.TextStatus ="On"; // nothing is changed in label
        //MessageBox.Show("On");
    }

你可以通过在Form_Load上设置一个方法来引用表单。

private void Form1_Load(object sender, EventArgs e)
{
    MyClass.SetUIComponents(this);
}

之后,在类中创建一个全局变量,并使用。

public class MyClass{
  //Constructor
  public MyClass(){...}
  public void SetUIComponents(Form1 Form1)
  {
      // Get MainForm to reference public UI objects 
      this.Form = Form;
  }
}

初始化Form1全局变量后,就可以引用Form了。请记住,像标签或按钮这样的对象必须将其修饰符(在对象属性Form1[Design]中找到)更改为public,以便您可以更改文本,名称等