从类调用和传递给方法
本文关键字:方法 调用 | 更新日期: 2023-09-27 17:55:31
我有一个主窗体(称为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 类中更改标签文本?
编辑:首先,我要感谢您的帮助。但建议的解决方案没有达到预期的效果。
我想我将不得不向您展示更多我的代码来解决这个问题:
表格1:
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
}
}
}
}
我希望这有所帮助。
这是另一个建议:这是表单中的方法:
public void SetLabelText(string text)
{
lbl1.Text = text;
}
在此类中,您有所需的方法,该方法将Form1
作为参数仅当MyInput
和Form1
位于同一命名空间中或添加适当的引用时,这才有效!
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
实例就在手边。
如果您不打算创建Form1
的新实例,请不要使用 new
以下是有关如何使用new
及其对程序流的影响的文档。希望这能有所帮助。
通过调用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.");
每次使用 new 关键字时,您都会创建一个 Form1 的新实例,该关键字随后会在某处更改另一个表单。
您需要的示例代码可以像这样完成
class MyInput
{
private Form1 form;
public MyInput(Form1 form1)
{
this.form = form1;
setFormText("test");
}
private void setFormText(string text)
{
form.label1.Text = text;
}
}
像这样,您可以像在表单中一样进行操作1
var myinput = new MyInput(this);
和 Form1 用于 MyInput 类。使用相同的方法,您可以通过构造函数将表单的实例传递给另一个表单。
但是,如果您尝试执行在代码示例中执行的操作,则可能需要对什么是 Reference 和什么是实例进行更多研究。