我有一个带有AddPiece(piece)功能的Lot。
我还有一个带有按钮btnPanel的页面,点击该按钮会激活该功能
public void btnPanel_OnClick(object sender, EventArgs e){}
我想从Addpiece函数调用btnPanel_OnClick,但是当我尝试这样做时,它没有显示在intlliSense中,我得到了这个编译错误“当前上下文中不存在名称'btnPanel_OnClick'”。两个类都在同一名称空间中。这可能吗?
这就是我所拥有的:
namespace GraphicW_Array
{
public partial class Board : System.Web.UI.Page
{
public void btnPanel_OnClick(object sender, EventArgs e)
{
...code...
}
}
}
和
namespace GraphicW_Array
{
public class Lot
{
public void addPiece(int piece)
{
lotPresent[lotLoad] = piece;
lotLoad++;
}
}
}
答案 0 :(得分:2)
是的,这是可能的。
确保您的Lot
类具有对Board
类的引用,以便能够调用它,或者在其上定义Board
类可以订阅的事件,并且事件发生时会调用此方法。
如果您不使用sender
和e
参数,只需传递null
和EventArgs.Empty
。
答案 1 :(得分:2)
我认为答案是肯定的,但你可能不想这样做。要调用您需要的方法和页面类的实例,以便可以执行
namespace GraphicW_Array
{
public class Lot
{
public void addPiece(int piece)
{
lotPresent[lotLoad] = piece;
lotLoad++;
var myPage = new Board();
myPage.btnPanel_OnClick(null,EventArgs.Empty);
}
}
}
但那实际上会做什么?我不知道,因为你没有发布代码,但我怀疑它不会对你有用。
你到底想要实现什么目标?
也许这就是你想要的
namespace GraphicW_Array
{
public class Lot
{
public void addPiece(int piece, Board myPAge)
{
lotPresent[lotLoad] = piece;
lotLoad++;
myPage.btnPanel_OnClick(null,EventArgs.Empty);
}
}
}
然后在您的页面中,您可以这样称呼它:
var myLot = new Lot();
myLot.addPiece(4,this);
答案 2 :(得分:1)
您可以通过传递null来调用page的事件(如果sender和EventArgs不是必需的),但下面是更好的方法。
从类中调用事件并不是明智而不是好的做法,但是您可以在类中使用参数创建另一个方法,然后在需要时使用所需的参数调用它。
这可以通过以下方式完成:
假设你有下面的事件
public void btnPanel_OnClick(object sender, EventArgs e)
{
//Do some common tasks to do here
}
重新排列如下:
public void btnPanel_OnClick(object sender, EventArgs e)
{
Lot lot = new Lot();
lot.CommonFunction(arg1, arg2); // Pass required data
}
public class Lot
{
public void AFunction()
{
//Do something
//...
CommonFunction(arg1, arg2); // Pass required data
//...
//Do something
}
public void CommonFunction(string arg1, string arg2)
{
// Do some common tasks to do here
}
}