public class Form1:Form
{
public Form1()
{
}
Form1_Load(object Sender,EventArgs e)
{
SampleClass Sample=new SampleClass();
Sample.MyMethod();
}
}
这是我项目的第一堂课,其次是
大家好
public class SampleClass
{
public void MyMethod()
{
//When Form1 or another class call this Method
//I want to know it for example
Caller.Title="Deneme";
//
//Unless send parametr.How Can I learn Caller class and i change it items?
}
}
答案 0 :(得分:3)
调用者必须将对自身的引用传递给方法。
public void MyMethod(Form caller)
{
caller.Title="Deneme";
}
或者,如果您不希望SampleClass
具有到Form类的强大链接 - 它可能位于不引用Windows窗体的单独程序集中,您可以传入一个使用传入正确的字符串。
Form1_Load(object Sender,EventArgs e)
{
SampleClass Sample=new SampleClass();
Sample.MyMethod( title => this.Title = title );
}
和
public void MyMethod(Action<string> setTitle )
{
setTitle ("Deneme");
}
编辑以解释代表
动作参数
MyMethod上的Action参数本质上是一个包含可以运行的代码的变量。 (完全理解这个概念确实需要一点点扭曲。)该类型的<string>
部分表示我们可以将字符串传递给将要运行的代码。
然后是行
setTitle ("Deneme");
调用此代码并将文本传递给“Deneme”。这是您要将Windows标题设置为的文本。现在,MyMethod
方法实际上并不知道它将把Windows标题设置为此文本。这已成为来电者的责任。 (如果您希望MyMethod
绝对确定它正在设置表单的标题,那么第一个解决方案就是您想要的解决方案。)
<强>调用强>
方法的调用者调用
MyMethod( title => this.Title = title );
MyMethod的参数是:
title => this.Title = title
这是您传递给Action变量的代码。 title
左侧的=>
是调用代码时将传递给它的String变量,而=>
右侧的内容是被调用的代码。
因此,当表单调用MyMethod时,它表示我想要该字符串,并且我将设置我的标题。
这就是MyMethod不知道形式的美妙之处。如果要在编写控制台应用程序时重用您的类,可以调用:
MyMethod ( title => Console.WriteLine (title) );
MyMethod根本不需要触及!
答案 1 :(得分:1)
你可以尝试:
public class SampleClass
{
public void MyMethod(Form sender)
{
sender.Text = "title";
}
}