C# 如何访问此方法中的变量

C# 如何访问此方法中的变量,c#,C#,我有一个windows应用程序,它使用串行端口向微处理器发送和接收消息 该应用程序运行良好,完成了预期的任务。现在,我需要对从serial收到的数据进行详细说明,我想访问SetText方法中的变量“value”。 如何从其他方法或类访问该变量的内容? 谢谢你的帮助 delegate void SetTextCallback(string text); private void SetText(string text) { if (this.txtOutput.I

我有一个windows应用程序,它使用串行端口向微处理器发送和接收消息

该应用程序运行良好,完成了预期的任务。现在,我需要对从serial收到的数据进行详细说明,我想访问SetText方法中的变量“value”。 如何从其他方法或类访问该变量的内容? 谢谢你的帮助

 delegate void SetTextCallback(string text);
    private void SetText(string text)
    {
        if (this.txtOutput.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(SetText);
            this.BeginInvoke(d, new object[] { text });


        }
        else
        {
            txtOutput.AppendText(text);
        }



        // capture messages from serial port
        if (txtOutput.Text.Length > 0)
        {
            MatchCollection mc = Regex.Matches(txtOutput.Text, @"(\+|-)?\d+");
            if (mc.Count > 0)
            {
                long value = long.Parse(mc[mc.Count - 1].Value);


                if (value > 1 && value < 1000)
                {
                    textBox2.Text = value.ToString();
                }
                else if (value < 2000 && value > 1000)
                {
                    value = value - 1000;
                    textBox3.Text = value.ToString();
                }

            }
        }
    }
    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {

        try
        {
            SetText(serialPort1.ReadExisting());
        }

        catch (Exception ex)
        {
            SetText(ex.ToString());
        }

    }
delegate void SetTextCallback(字符串文本);
私有void SetText(字符串文本)
{
if(this.txtOutput.invokererequired)
{
SetTextCallback d=新的SetTextCallback(SetText);
this.BeginInvoke(d,新对象[]{text});
}
其他的
{
txtOutput.AppendText(文本);
}
//从串行端口捕获消息
如果(txtOutput.Text.Length>0)
{
MatchCollection mc=Regex.Matches(txtOutput.Text,@“(\+\124;-)?\ d+”;
如果(mc.Count>0)
{
long value=long.Parse(mc[mc.Count-1].value);
如果(值>1&&值<1000)
{
textBox2.Text=value.ToString();
}
否则如果(值<2000&&value>1000)
{
值=值-1000;
textBox3.Text=value.ToString();
}
}
}
}
private void serialPort1\u DataReceived(对象发送方,System.IO.Ports.SerialDataReceivedEventArgs e)
{
尝试
{
SetText(serialPort1.ReadExisting());
}
捕获(例外情况除外)
{
SetText(例如ToString());
}
}

您可以使用“静态”变量或实例变量访问其他类中的变量

public class Demo1
{
     //Static variable can be accessed without instantiating an instance of Demo1
     public static int Number;      //Demo1.Number
     public string Info {get;set;}
}

public class AnotherClass
{
     void DoSth()
     {
         Demo1.Number ++;
     }
}
或者,如果您有Demo1的实例,请说demo1Instance

demo1Instance.Info="Sth you like";

您可以使用“静态”变量或实例变量访问其他类中的变量

public class Demo1
{
     //Static variable can be accessed without instantiating an instance of Demo1
     public static int Number;      //Demo1.Number
     public string Info {get;set;}
}

public class AnotherClass
{
     void DoSth()
     {
         Demo1.Number ++;
     }
}
或者,如果您有Demo1的实例,请说demo1Instance

demo1Instance.Info="Sth you like";
考虑这一点:

建房

public long Value { get; set; }
在代码中使用此选项

if (txtOutput.Text.Length > 0)
        {
            MatchCollection mc = Regex.Matches(txtOutput.Text, @"(\+|-)?\d+");
            if (mc.Count > 0)
            {
                value = long.Parse(mc[mc.Count - 1].Value);


                if (value > 1 && value < 1000)
                {
                    textBox2.Text = value.ToString();
                }
                else if (value < 2000 && value > 1000)
                {
                    value = value - 1000;
                    textBox3.Text = value.ToString();
                }

            }
考虑这一点:

建房

public long Value { get; set; }
在代码中使用此选项

if (txtOutput.Text.Length > 0)
        {
            MatchCollection mc = Regex.Matches(txtOutput.Text, @"(\+|-)?\d+");
            if (mc.Count > 0)
            {
                value = long.Parse(mc[mc.Count - 1].Value);


                if (value > 1 && value < 1000)
                {
                    textBox2.Text = value.ToString();
                }
                else if (value < 2000 && value > 1000)
                {
                    value = value - 1000;
                    textBox3.Text = value.ToString();
                }

            }

如果数据将被多个地方使用,那么不要犹豫,创建一个包含输出变量列表的类,这些变量将在方法之间共享。在该类中为该变量创建属性。现在,为该类全局创建一个对象,并将从微处理器检索到的值分配给该全局声明对象中的属性。您可以在任何地方访问此文件。由于这是一个windows应用程序,因此在清除或关闭应用程序之前,数据将一直保留

这是代码。我在windows应用程序中有一个文本框和两个按钮。一个按钮用于获取数据,另一个按钮用于显示数据。数据是使用文本框从用户处获取的。在单击show data(显示数据)按钮获取数据一次后,它将显示推送到对象的数据,次数与您想要的次数相同

 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 WindowsFormsApplication1
  {
public partial class Form1 : Form
{
    // Declare Global Variable
    DataHolder objDataHolder = new DataHolder();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // Here use your code to load the data retrieved from Microprocessor
        objDataHolder.UserData = txtUserData.Text;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show(objDataHolder.UserData);
    }
}

// Class to hold Data 
public class DataHolder
{
    // Here have a list variables that you need to maintain that are retrieved from Microrocessor.
    private string _userdata = string.Empty;

    // Here have a list Properties that you need to maintain that are retrieved from Microrocessor.
    public string UserData
    {
        get
        {
            return _userdata;
        }
        set
        {
            _userdata = value;
        }
    }
}

}

如果数据要在多个地方使用,请毫不犹豫地创建一个类,其中包含要在方法之间共享的输出变量列表。在该类中为该变量创建属性。现在,为该类全局创建一个对象,并将从微处理器检索到的值分配给该全局声明对象中的属性。您可以在任何地方访问此文件。由于这是一个windows应用程序,因此在清除或关闭应用程序之前,数据将一直保留

这是代码。我在windows应用程序中有一个文本框和两个按钮。一个按钮用于获取数据,另一个按钮用于显示数据。数据是使用文本框从用户处获取的。在单击show data(显示数据)按钮获取数据一次后,它将显示推送到对象的数据,次数与您想要的次数相同

 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 WindowsFormsApplication1
  {
public partial class Form1 : Form
{
    // Declare Global Variable
    DataHolder objDataHolder = new DataHolder();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // Here use your code to load the data retrieved from Microprocessor
        objDataHolder.UserData = txtUserData.Text;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show(objDataHolder.UserData);
    }
}

// Class to hold Data 
public class DataHolder
{
    // Here have a list variables that you need to maintain that are retrieved from Microrocessor.
    private string _userdata = string.Empty;

    // Here have a list Properties that you need to maintain that are retrieved from Microrocessor.
    public string UserData
    {
        get
        {
            return _userdata;
        }
        set
        {
            _userdata = value;
        }
    }
}

}

这就是我所做的,现在正在发挥作用。谢谢大家的好建议。我非常确信,我将很快在应用程序的其他开发中使用您的示例

 internal long value;
        private void SetText(string text)
        {
            if (this.txtOutput.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.BeginInvoke(d, new object[] { text });


            }
            else
            {
                txtOutput.AppendText(text);
            }
            // capture messages from serial port
            if (txtOutput.Text.Length > 0)
            {
                MatchCollection mc = Regex.Matches(txtOutput.Text, @"(\+|-)?\d+");

                if (mc.Count > 0)
                {
                    value = long.Parse(mc[mc.Count - 1].Value);
                    if (value > 1 && value < 1000)
                    {
                        textBox2.Text = value.ToString();
                    }
                    else if (value < 2000 && value > 1000)
                    {
                        value = value - 1000;
                        textBox3.Text = value.ToString();
                    }

                }
            }
        }
内部长值;
私有void SetText(字符串文本)
{
if(this.txtOutput.invokererequired)
{
SetTextCallback d=新的SetTextCallback(SetText);
this.BeginInvoke(d,新对象[]{text});
}
其他的
{
txtOutput.AppendText(文本);
}
//从串行端口捕获消息
如果(txtOutput.Text.Length>0)
{
MatchCollection mc=Regex.Matches(txtOutput.Text,@“(\+\124;-)?\ d+”;
如果(mc.Count>0)
{
value=long.Parse(mc[mc.Count-1].value);
如果(值>1&&值<1000)
{
textBox2.Text=value.ToString();
}
否则如果(值<2000&&value>1000)
{
值=值-1000;
textBox3.Text=value.ToString();
}
}
}
}

这就是我所做的,它现在正在发挥作用。感谢大家提出的好建议。我非常确信,我将很快在应用程序的其他开发中使用您的示例

 internal long value;
        private void SetText(string text)
        {
            if (this.txtOutput.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.BeginInvoke(d, new object[] { text });


            }
            else
            {
                txtOutput.AppendText(text);
            }
            // capture messages from serial port
            if (txtOutput.Text.Length > 0)
            {
                MatchCollection mc = Regex.Matches(txtOutput.Text, @"(\+|-)?\d+");

                if (mc.Count > 0)
                {
                    value = long.Parse(mc[mc.Count - 1].Value);
                    if (value > 1 && value < 1000)
                    {
                        textBox2.Text = value.ToString();
                    }
                    else if (value < 2000 && value > 1000)
                    {
                        value = value - 1000;
                        textBox3.Text = value.ToString();
                    }

                }
            }
        }
内部长值;
私有void SetText(字符串文本)
{
if(this.txtOutput.invokererequired)
{
SetTextCallback d=新的SetTextCallback(SetText);
this.BeginInvoke(d,新对象[]{text});
}
其他的
{
txtOutput.AppendText(文本);
}
//从串行端口捕获消息
如果(txtOutput.Text.Length>0)
{
MatchCollection mc=Regex.Matches(txtOutput.Text,@)(