调用并传递给类中的方法

时间:2016-07-06 14:36:18

标签: c# winforms class methods

我有一个主表单(称为Form1),其中我有一个标签(称为lbl1)。

除此之外,我还有一个看起来像这样的方法:

public void SetLabelText(string lblText)
{
   lbl1.Text = lblText;
}

现在我想从一个类中调用该方法(在我的例子中,它被称为MyInput)

我试图通过

调用该方法
Form1 F1 = new Form1();
F1.SetLabelText="This is an example";

或(不使用我创建的方法)

Label L1 = new Form1().lbl1;
L1.Text = "This is an example";

然而,在这两种情况下,第二个Form1打开并导致我的其余程序出现各种问题。标签本身具有公共修饰符。

如何从MyInput类中更改label.text?

编辑: 首先,我要感谢你的帮助。但建议的解决方案没有达到预期效果。

我想我必须向您展示更多解决此问题的代码:

Form1中:

namespace Project2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            .
            .
            .

            myInput.Check();

            public void SetLableText(string lblText)
            {
                lbl1.Text = lblText;
            }
        }
    }
}

在我班上:

namespace Project2
{
    class MyInput
    {

        public static void Check()
        {
            CODE FOR CHECKING STATUS OF DEVICE

            if(status == 0)
            {
                //At this point lbl1.Text should be changed
            }
        }
    }
}

我希望这会有所帮助。

3 个答案:

答案 0 :(得分:0)

通过调用Form F1 = new Form1(),您正在创建表单的新实例,这就是您查看第二个窗口的原因。

首次创建时,您需要在某个地方存储对该表单的引用。然后,您需要在该实例上调用SetLabelText()

例如

// Program.cs
public static Form1 _form;
// sample main method
public static void Main(string[] args)
{
    _form = new Form1();
    Application.Run(_form);
}

然后您可以将其称为Program._form.SetLabelText("Whatever the string is.");

答案 1 :(得分:0)

这里有另一个建议: 这是你的方法表格:

public void SetLabelText(string text)
{
    lbl1.Text = text;
}

在这个课程中,您有所需的方法,该方法以Form1为参数 如果MyInputForm1位于同一名称空间中,或者您添加了适当的引用,那么才能正常工作!

class MyInput
{
   public static void Check(Form1 form)
   {
       // do what ever job you have to do
       form.SetLabelText("JobResultHere");
   }
}

修改

现在它强烈依赖于此函数调用的位置:

MyInput.check(...

如果调用是在Form的类中,并且需要更改标签,那么你可以像这样调用它

MyInput.check(this);

this表示调用发生的类的当前实例。

如果您要从其他地方调用它,请确保Form1实例即将到来。

如果您不打算创建new

的新实例,请

不要使用Form1

here是关于如何使用new的文档以及它对程序流程的影响。希望这可以提供帮助。

答案 2 :(得分:-1)

首先,每次使用新关键字后,您都会创建一个新的Form1实例,之后会改变另一种形式。

您需要的示例代码可以像

那样完成
class MyInput
{
    private Form1 form;

    public MyInput(Form1 form1)
    {
        this.form = form1;
        setFormText("test");
    }

    private void setFormText(string text)
    {
        form.label1.Text = text;
    }
}

像这样你可以像在form1中那样做

var myinput = new MyInput(this);

和Form1在MyInput类中使用。 使用相同的方法,您可以通过构造函数将表单实例传递给另一个表单。

但是,如果您尝试在代码示例中完成所做的工作,则可能需要对“参考”和“实例”进行更多研究。