开发者

C#: Need one of my classes to trigger an event in another class to update a text box

开发者 https://www.devze.com 2022-12-25 14:26 出处:网络
Total n00b to C# and events although I have been programming for a while. I have a class containing a text box. This class creates an instance of a communication manager class that is receiving fram

Total n00b to C# and events although I have been programming for a while.

I have a class containing a text box. This class creates an instance of a communication manager class that is receiving frames from the Serial Port. I have this all working fine.

Every time a frame is received and its data extracted, I want a method to run in my class with the text box in order to append this frame data to the text box.

So, without posting all of my code I have my form class...

public partial class Form1 : Form
{
    CommManager comm;

    public Form1()
  开发者_高级运维  {
        InitializeComponent();
        comm = new CommManager();

    }

    private void updateTextBox()
    {
        //get new values and update textbox
    }
    .
    .
    .

and I have my CommManager class

class CommManager 
{
     //here we manage the comms, recieve the data and parse the frame
}

SO... essentially, when I parse that frame, I need the updateTextBox method from the form class to run. I'm guessing this is possible with events but I can't seem to get it to work.

I tried adding an event handler in the form class after creating the instance of CommManager as below...

 comm = new CommManager();
 comm.framePopulated += new EventHandler(updateTextBox);

...but I must be doing this wrong as the compiler doesn't like it...

Any ideas?!


Your code should look something like:

public class CommManager()
{
    delegate void FramePopulatedHandler(object sender, EventArgs e);

    public event FramePopulatedHandler FramePopulated;

    public void MethodThatPopulatesTheFrame()
    {
        FramePopulated();
    }

    // The rest of your code here.
}

public partial class Form1 : Form      
{      
    CommManager comm;      

    public Form1()      
    {      
        InitializeComponent();      
        comm = new CommManager();      
        comm.FramePopulated += comm_FramePopulatedHander;
    }      

    private void updateTextBox()      
    {      
        //get new values and update textbox      
    }

    private void comm_FramePopulatedHandler(object sender, EventArgs e)
    {
        updateTextBox();
    }
}

And here's a link to the .NET Event Naming Guidelines mentioned in the comments:

MSDN - Event Naming Guidelines


Here you have "The Simplest C# Events Example Imaginable".



    public partial class Form1: Form
    {
        CommManager comm;

        public Form1()
        {
            InitializeComponent();
            comm = new CommManager();
            comm.OnFramePopulated += new EventHandler(updateTextBox);
        }

        private void updateTextBox(object sender, EventArgs ea)
        {
            //update Textbox
        }
    }

    class CommManager
    {
        public EventHandler OnFramePopulated;

        public void PopulateFrame()
        {
            OnFramePopulated(this, null);
        }
    }


Yes - change the signature of updateTextBox to :

private void updateTextBox(object sender, Eventargs ea)

Although that might not be the best design. Things would look a lot neater if you wrote a proper event handler, and then called updateTextBox from there...

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号